2017-01-03 518 views
0

我試圖實現一個搜索視圖,它使用戶能夠根據關鍵字和多個複選框搜索其他用戶搜索其標籤。我仍然試圖找出如何放置collection_check_boxes的權利,以便視圖正確呈現。這是我到目前爲止有:Rails:collection_check_boxes過濾搜索結果

<%= form_tag users_path, :method => 'get' do %> 
    <%= collection_check_boxes :options, :tag_ids, Tag.order(:name), :id, :name, {multiple: true} %> 
    <%= text_field_tag :search, params[:search], :placeholder => "Search", :id => "query" %> 
    <%= submit_tag "Search", :name => nil, :style => "float:left;"%> 
    <% end %> 

你能幫我通過確保完成上述視圖功能,當用戶點擊searchcollection_check_boxes會添加類似tag=tag1&tag2&tag3的網址是什麼?

回答

1

我會試試:)

一般來說一切正常。只有小幅盤整,如果改變這一行:

<%= collection_check_boxes :options, :tag_ids, Tag.order(:name), :id, :name, {multiple: true} %> 

這樣:

<%= collection_check_boxes :tag, :ids, Tag.order(:name), :id, :name, {multiple: true} %> 

提交請求時,在URL後會是這樣的:

&tag%5Bids%5D%5B%5D=&tag%5Bids%5D%5B%5D=3&tag%5Bids%5D%5B%5D=2&search=test 

更多人的看法:

&tag[ids][]=&tag[ids][]=3&tag[ids][]=2&search=test 

這是好。發送數組時它總是看起來像這樣。在這種特殊情況下,我檢查了兩個複選框(id = 2和3)。我不知道爲什麼還有空元素:),但這不是問題。我覺得沒有辦法得到的結果完全一樣tag=tag1&tag2&tag3

在你的「用戶」模式,你可以得到由PARAMS(提交表格後):

params[:tag][:ids] - array of id (checked checkboxes) 
params[:search] - search input value 

如果你想檢查了一些複選框在啓動(或提交後),添加到collection_check_boxes附加參數:

options = {:checked=>tag_ids} 

和在可變tag_ids遞送陣列複選框ID(其應檢查)。所有代碼如下所示:

<%if params.has_key?(:tag)%> 
    <%tag_ids = params[:tag][:ids]%> 
<%else%> 
    <%tag_ids = Array.new%> 
<%end%> 

<%=form_tag drons_path, :method => 'get' do %> 
    <%=collection_check_boxes :tag, :ids, Tag.order(:name), :id, :name, {multiple: true}, options = {:checked=>tag_ids}%> 
    <%=text_field_tag :search, params[:search], :placeholder => "Search", :id => "query"%> 
    <%=submit_tag "Search", :name => nil, :style => "float:left;"%> 
<%end %>