Rails元搜索search_form带复选框

时间:2011-12-28 09:27:10

标签: ruby-on-rails search filter checkbox meta-search

我有点困惑。 尽管这里有关于这个主题的所有问题,但我找不到合适的解决方案。

我想要做的只是在我的索引过滤器表单中添加复选框。

我正在使用Metasearch gem,这是我目前的代码:

  <form class="filter_form">
     <%= form_for @search do |f| %>
       <%= f.collection_select :categories_id_equals, Category.all, :id, :name, :include_blank => true, :prompt => "All categories" %>
       <%= f.collection_select :location_id_equals, Location.all, :id, :name, :include_blank => true, :prompt => "All locations" %>

       <ul> 
          <b> Type </b>     
          <% Type.all.each do |type|%>
        <li>
          <%= check_box_tag :types_id_equals, type.id %>
          <%=h type.name %>
        </li>
          <% end %>
      </ul>
       <%= submit_tag "Find Now", :class => "find" %>
     <% end %>

除了复选框外,一切正常。

我对rails没有太多经验,所以我真的没有看到我做错了什么,以及什么是最方便和最简单的方法。

更新 .....................

更多解释 - 我有一个模型Trips,它与两个模型有HABTM关系( 类别,类型)并且属于位置。

我希望能够按类别(f.collection select),位置(f.collection select)和类型(复选框)过滤Trips on the index。

检查类型并提交后 - 没有任何更改,也没有进行过滤!

2 个答案:

答案 0 :(得分:0)

<%= check_box_tag "type_ids[]", type.id %>

会为你做的。选定的id将被转换为由commatas分隔的字符串。您可以在params[:type_ids]中找到它们,但您必须手动处理它们! Rails不是一个魔术师,它是一个框架。

答案 1 :(得分:0)

以下是我处理它的方式。

<% @sub_categories.each do |cat| %>
   <h2><%= cat.name %> <%= check_box_tag "q[product_category_id_in][]", cat.id %></h2>
<% end %>

基本上只要q是你的查询参数,然后就在meta_search方法的括号sub之后。我使用了whatever_foreign_key_in因为我希望能够在数组中添加多个id来搜索。然后在它之后添加空括号,以便rails正确处理post params。