Ruby on rails 使用复选框筛选记录
我正试图从零编程经验中学习rails,并尝试制作一个应用程序。在这里的人们的帮助下,我有一个场馆的索引页面,可以通过下拉菜单按它们所属的地区进行过滤。我希望能够有同样的影响,但使用复选框,也能够选择多个地区添加到过滤器。这就是我到目前为止所做的: 型号:Ruby on rails 使用复选框筛选记录,ruby-on-rails,checkbox,filtering,Ruby On Rails,Checkbox,Filtering,我正试图从零编程经验中学习rails,并尝试制作一个应用程序。在这里的人们的帮助下,我有一个场馆的索引页面,可以通过下拉菜单按它们所属的地区进行过滤。我希望能够有同样的影响,但使用复选框,也能够选择多个地区添加到过滤器。这就是我到目前为止所做的: 型号: class Venue < ActiveRecord::Base belongs_to :user has_many :reviews belongs_to :area scope :north, where(:area
class Venue < ActiveRecord::Base
belongs_to :user
has_many :reviews
belongs_to :area
scope :north, where(:area_id => "2")
scope :west, where(:area_id => "3")
scope :south, where(:area_id => "4")
end
场馆索引.html.erb:
<div class="filter_options_container">
<form class="filter_form", method="get">
<%= select("area", "name", Area.all.collect(&:name), {:prompt => 'All Areas'}) %><br>
<input type="submit" value="Filter" />
</form>
<br><br>
<form class="filter_form", method="get">
<% Area.find(:all).each do |a| %>
<%= check_box_tag("area", "name") %>
<%= a.name %>
<% end %>
<input type="submit" value="Filter" />
</form>
</div>
<div class="venue_partials_container">
<%= render :partial => 'venue', :collection => @venues %>
<div class="clearall"></div>
<%= link_to 'add a new venue', new_venue_path, :class => "add_new_venue_button" %>
</div>
“所有区域”})%>
‘场馆’,:收藏=>@victions%>
“添加新场馆”按钮%>
filter_options_容器中的第一个表单(下拉列表)工作正常,但复选框(第二个表单)返回“无法将符号转换为整数”我缺少/做错了什么
感谢您的帮助。在您的呼叫区域。找到您提供的参数:全部。我假设您正在使用的Rails 3中不推荐使用这种语法。无法再使用find(:All,…)或find(:first,…)等的所有以前用法。相反,您应该像在第一个表单中一样使用它:Area.all(…) 作为旁注,复选框标记参数也可能是错误的。我想你应该发送一个.name而不是“name” 我认为这是一个经过修改的表单:
<form class="filter_form", method="get">
<% Area.all.each do |a| %>
<%= check_box_tag("area", a.name) %>
<%= a.name %>
<% end %>
<input type="submit" value="Filter" />
</form>
我不知道是什么原因导致了您的错误,但我可以告诉您,
复选框标记
帮助程序的工作方式与您期望的不一样。从,它的定义如下:
check_box_tag(name, value = "1", checked = false, options = {})
所以反复调用复选框标记(“区域”、“名称”)
只会给你多次
。请注意,“value”属性(即提交表单时发送到服务器的值)始终是“name”-而不是您想要的
相反,请尝试以下操作:
<% Area.all.each do |a| %>
<%= check_box_tag("areas[]", a.id) %>
<%=h a.name %>
<% end %>
…在Rails应用程序中,会为您提供参数哈希
{:a => 12}
…但是URL
/whatever?a=3&a=17&a=12
/whatever?a[]=3&a[]=17&a[]=12
…为您提供您想要的:
{:a => [3, 17, 12]}
如果你有一个你感兴趣的所有区域ID的数组,你可以在一个队列中获得这些区域的所有场地(Rails不是很棒吗?)
在调用查找器之前,请确保您拥有一个有效的区域id数组——如果没有,您的条件哈希值将计算为{:area_id=>nil},Rails将找到所有没有区域id的场地——可能没有,而且肯定不是您想要的
希望这有帮助
{:a => [3, 17, 12]}
filtered_venues = Venue.all(:conditions => {:area_id => params[:areas]})