почему моя форма не генерирует параметры выбора?

#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