Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用复选框筛选记录_Ruby On Rails_Checkbox_Filtering - Fatal编程技术网

Ruby on 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

我正试图从零编程经验中学习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
场馆索引.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]})