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