#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
и их соответствующими представлениями соответственно.