ruby-on-rails – 使用复选框过滤记录
我正在尝试从零编程经验中学习rails并且有一个我试图制作的应用程序.在这里的人们的帮助下,我有一个场地的索引页面,可以通过下拉菜单过滤它们所属的区域.我希望能够产生相同的效果,但使用复选框,并且还能够选择多个区域添加到过滤器.这是我到目前为止:
型号: 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 控制器: def index if (params[:area] && Area.all.collect(&:name).include?(params[:area][:name])) @venues = Venue.send(params[:area][:name].downcase) else @venues = Venue.all end end 场地index.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> filter_options_container中的第一个表单(下拉列表)工作正常,但复选框(第二个表单)返回“无法将符号转换为整数”,我错过了什么/做错了什么? 感谢您的任何帮助. 解决方法
我不知道究竟是什么导致了您的错误,但我可以告诉您,check_box_tag帮助程序没有按照您期望的方式工作.从
the documentation开始,它的定义如下:
check_box_tag(name,value = "1",checked = false,options = {}) 因此,重复调用check_box_tag(“area”,“name”)只会给你< input id =“area”name =“area”type =“checkbox”value =“name”/>多次.请注意,“value”属性(在提交该表单时发送到您的服务器的值)始终是“名称” – 不是您想要的! 相反,请尝试以下方法: <% Area.all.each do |a| %> <%= check_box_tag("areas[]",a.id) %> <%=h a.name %> <% end %> 我改变的事情: >我使用了Area.all而不是Area.find(:all) – 我是出于美观原因而做的,但是DanneManne的回答声称它在Rails 3中已经过时了(我不知道 – 我仍然在2.3.8). 扔掉网址…… /whatever?a=3&a=17&a=12 …在Rails应用程序中为您提供params哈希… {:a => 12} ……但是网址…… /whatever?a[]=3&a[]=17&a[]=12 …给你你想要的东西: {:a => [3,17,12]} 如果你有一个你感兴趣的所有area_ids的数组,你可以在一个单行中获得所有这些区域的所有场地(不是Rails好吗?): filtered_venues = Venue.all(:conditions => {:area_id => params[:areas]}) 在调用该查找程序之前,请确保您有一个有效的区域ID数组 – 如果不这样做,您的条件哈希将评估为{:area_id => nil},Rails会找到你所有没有area_id的场地 – 可能没有,绝对不是你想要的. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |