2017-01-03 308 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 %>