#ruby-on-rails #ruby #forms
#ruby-on-rails #ruby #формы
Вопрос:
Я пытаюсь создать простой фильтр на странице моего индекса розыгрышей, чтобы фильтровать мои розыгрыши по категориям. Однако ни один из параметров выбора не заполняется — выпадающий список полностью пуст. Я думаю, что это как-то связано с моим представлением, я, по общему признанию, не эксперт в формах.
#app/controllers/raffles_controller.rb
def index
@raffles = Raffle.filter(params[:filter])
end
#app/models/raffle.rb
class Raffle < ApplicationRecord
has_many :tickets
has_many :users, through: :tickets
def self.filter(filter)
if filter
raffle = Raffle.where(category: filter)
else
Raffle.all
end
end
end
#app/views/raffles/index.rb
<h1>Current Raffles:</h1>
<%= form_tag(raffles_path, method: 'get') do %>
<%= select_tag(Raffle.pluck(:category).uniq, params[:filter]) %>
<%= submit_tag ("Filter") %>
<% end %>
есть идеи?
Ответ №1:
В вашем вызове select_tag
отсутствует имя в первом параметре, и ваш список параметров также должен быть создан.
Для создания списка свойств вы можете использовать помощник options_for_select
Если вы хотите определить выбранное значение, вы options_for_select
также можете отправить его.
Основываясь на вашем примере, это должно выполнить эту работу:
<%= select_tag(:filter, options_for_select(Raffle.pluck(:category).uniq, params[:filter])) %>
Хорошим источником, когда у вас есть вопросы о том, как работает определенный помощник формы, являются https://guides.rubyonrails.org/form_helpers.html#the-select-and-option-tags