Rails:collection_check_boxes用于过滤搜索结果

时间:2017-01-03 04:35:41

标签: ruby-on-rails forms search checkbox act-as-taggable-on

我正在尝试实施一个搜索视图,该视图允许用户根据关键字和其标签的多个复选框搜索其他用户。我还在试图弄清楚如何将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 %>

您是否可以帮助我完成上面的观看功能,确保当用户点击search collection_check_boxes时会向网址添加tag=tag1&tag2&tag3等内容?

1 个答案:

答案 0 :(得分: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[: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 %>
相关问题