0

我正在尝试实现一个搜索视图,使用户能够根据关键字和多个复选框搜索其他用户的标签。我仍在尝试弄清楚如何放置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 %>

你能帮我完成上面的视图功能吗,确保当用户点击时会在 url 中search collection_check_boxes添加类似的内容?tag=tag1&tag2&tag3

4

1 回答 1

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 %>
于 2017-01-22T18:57:20.990 回答