Я не уверен, какой правильный способ Rails 3 это сделать. Я хочу иметь поля критериев фильтрации в верхней части моего представления индекса, которые будут фильтровать данные.
То, что у меня есть, работает для фильтрации моего списка, но я также хочу, чтобы поля фильтра были повторно заполнены тем, что текущий фильтр есть, и я не могу понять, как это сделать. Метод, который я использовал ниже, также не кажется «правильным» способом для достижения этой цели, поскольку он полагается на такие вещи, как передача пустой строки в вспомогательные методы поля, на мой взгляд.
Контроллер:
def index
@animals = Animal.by_color(params[':color']).by_age(params[':age']).paginate(:page => params[:page])
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @animals }
end
end
] Представление:
<h1>Listing Animals</h1>
Filter By:
<%= form_for(:animal, :url => { :action => "index" }, :html => {:method => :get} ) do |f| %>
<div>
Color: <%= text_field'', ':color', :size => 10 ) %>
Age: <%= text_field('', ':age') %>
<%= f.submit "Filter List" %>
</div>
<% end %>
<%= will_paginate %>
...
Я использую методы области видимости в моей модели, которые работают очень гладко. Я просто не знаю, как метод «params» контроллера и методы View «form_for», «text_field» сопоставляются друг с другом. Любые идеи о том, как реорганизовать это, а также заполнить поля моих фильтров, когда список в настоящее время фильтруется?
Контроллер:
def index
@search = Animal.new(params[:animal])
@animals = Animal.by_color(@search.color)...
....
Представление:
<%= form_for(@search, :url => { :action => "index" }, :html => {:method => :get} ) do |f| %>
<%= f.text_field(:color)
Заполнение формы работает путем создания объекта @search в мой contorller (в дополнение к моему основному объекту Animals). Затем с помощью form_for создайте for вокруг него.