Rails: Отфильтровать страницу индекса и повторно отобразить входные данные фильтра

Я не уверен, какой правильный способ 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 вокруг него.

6
задан Victor Bruno 1 August 2011 в 23:57
поделиться