2011-12-28 54 views
0

我有點困惑。 儘管在這個主題附近有所有問題,但我無法找到正確的解決方案。Rails metasearch search_form with checkboxes

我想要做的就是簡單地將複選框添加到我的索引過濾器窗體。

我使用的元搜索的寶石,這裏是我當前的代碼:

<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 %> 

所有工作正常,但複選框。

我對軌道沒有太多的經驗,所以我並不真正看到我在做錯什麼,什麼可能是最方便和最簡單的方法。

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

更多的解釋 - 我有一個模型人次,有兩種型號HABTM關係( 分類,類型)並屬於位置。

我希望能夠按照類別(f.collection select),位置(f.collection select)和類型(複選框)對索引進行過濾。

檢查類型並提交之後 - 沒有任何更改,不進行過濾!

+1

以哪種方式工作?不要apear?你會得到一個異常?你可以檢查它們,但只有一個選中的標識符在'params'哈希中被傳送? – davidb 2011-12-28 09:30:03

+0

沒有任何變化,複選框不會過濾結果。但是,從<%= check_box_tag%>更改爲<%= f.check_box%>後,只傳輸一個ID。 – emilsw 2011-12-28 09:50:31

回答

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

會爲你做。所選的ID將被轉換爲由逗號分隔的字符串。你可以在params[:type_ids]找到他們,但你必須手動處理它們! Rails不是一個魔術師,它是一個框架。

+0

仍然沒有好處。但是,你能解釋一下嗎 - 你必須手動處理你的意思是什麼?就像我說的我仍然是一個新手:) – emilsw 2011-12-28 11:40:03

0

以下是我如何處理它。

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

基本上只是q是你的查詢參數是什麼,然後在meta_search方法的括號內。我使用whatever_foreign_key_in,因爲我想能夠添加多個id到數組中進行搜索。然後在它後面添加空括號,以便導軌正確處理後參數。