Получение «Первый аргумент в форме не может содержать nil или быть пустым» при попытке реализовать функцию поиска в Rails

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Я пытаюсь создать функцию поиска по категориям в моем веб-приложении. В настоящее время я пытаюсь заставить выпадающее меню работать, но я постоянно получаю сообщение об ошибке:

 First argument in form cannot contain nil or be empty
 

Вот представление:

 <%= form_for @search, html: {class: "pure-form"} do |s| %>
 <div class="field">
    <%= s.label :category %>
    <%= s.select(:category, options_for_select([['Other', 'Other'], ["Breakfast", "Breakfast"], ["Lunch/Dinner", "Lunch/Dinner"], ["Dessert", "Dessert"]])) %>
<%end%>

<div class="card-columns">
    <% @images.each do |image| %>
        <div class="card">
            <div class="card-body p-1">
                <%= image_tag image.image, class: 'd-block w-100' %>
                <%= link_to image.title, image_path(image.id), class: "btn btn-primary stretched-link" %>
            </div>
        </div>
    <% end %>
</div>     
 

И вот контроллер:

 class SearchesController < ApplicationController
    def new 
        @search = Search.new
        @categories = Image.uniq.pluck(:category)
    end

    def create
        @search = Search.create(search_params)
        redirect_to @search
    end

    def show 
        @search = Search.find(params[:id])
    end 

    private
    
    def search_params 
        params.require(:search).permit(:category)
    end
        
end
 

И вот маршруты:

 Rails.application.routes.draw do
  devise_for :users
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root 'pages#home'

  get '/images', controller: 'images', action: 'recent'

  get '/upload', controller: 'images', action: 'new'

  get '/@:username', to: 'users#show', as: :profile

  delete 'images/:id(.:format)', :to => 'images#destroy'

  resources :images, only: [:index, :show, :create]
  get  'searches/search'

  resources :searches
end
 

Я пытался настроить разные вещи, чтобы посмотреть, смогу ли я заставить его работать, но не смог. Мне очень неясно, в чем проблема. Любая помощь будет оценена! Заранее спасибо!

Комментарии:

1. Какой URL-адрес, где вы видите эту ошибку?

2. URL-адреса: localhost:3000/images и localhost:3000/@[Имя пользователя]

3. Я не думаю, что что-то из этого повлияет на SearchesController то, что вы включили выше. Предполагая, что приведенный выше код представления app/views/searches/new.html.erb включен, я бы ожидал, что visiting / searches / new правильно покажет это представление — это работает? Полагайте, что URL-адреса /images и /@username будут совпадать с ImagesController и UsersController и их соответствующими представлениями соответственно.