【发布时间】:2011-08-01 19:27:14
【问题描述】:
我不确定正确的 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
结束
查看:
<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”方法和视图方法“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 对象(除了我的主要动物对象)来工作。然后使用 form_for 围绕它创建一个 for。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3