我会尝试 :)
一般来说,一切都很好。如果您更改此行,则只有很小的修正:
<%= 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 %>