rails collection_select params
Поэтому я пытаюсь отфильтровать некоторые данные на основе раскрывающегося списка collection_select.
Я могу успешно использовать text_field_tag для фильтрации данных, поэтому я предполагаю, что мой фильтр работает нормально, но я не могу заставить collection_select сделать то же самое?
Если я набираю 1 в text_field_tag, я генерирую "search"=>"1" как часть параметров, но если я выбираю из collection_select, я получаю... {"utf8"=>"✓", "search"=>{" поиск "=>" 1" },...
index.html.erb
<h1>Students#index</h1>
<p>Find me in app/views/students/index.html.erb</p>
<%= form_tag students_path, :method => 'get' do %>
<%= collection_select :search , :search.to_s, Tutor.all, :id, :name, prompt: true %>
<%= submit_tag "search" %>
<% end %>
<% @students.each do |n| %>
<li>
<%= link_to n.first_name, student_path(n) %>
<%= n.surname %> ..tutor is...
<%= n.tutor.name %>
</li>
<% end %>
<%= params.inspect %>
<%= form_tag(students_path, :method=> "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Students" %>
<%= submit_tag "Search", :name => nil %>
<% end %>
student.rb
class Student < ActiveRecord::Base
belongs_to :tutor
def self.search(search)
where("tutor_id LIKE ?","%#{search }%")
end
end
students_controller.rb
class StudentsController < ApplicationController
def index
if params[:search]
@students = Student.search(params[:search])
else
@students = Student.all
end
end
1 ответ
Решение
Вот как работает collection_select. Первый параметр collection_select
это объект, а не метод, поэтому ваши параметры выглядят так.
изменения params[:search]
в params[:search][:search]
должен решить вашу проблему.
class StudentsController < ApplicationController
def index
if params[:search][:search]
@students = Student.search(params[:search][:search])
else
@students = Student.all
end
end
end