使用 Ransack 将多个搜索表单结果合并为一个,Rails 4
Merge multiple search form results in one with Ransack , Rails 4
我有 Rails 4 应用程序 Ransack 用于搜索和排序。
到目前为止,我设法使用 Ajax 进行了搜索和排序。效果很好。
首先通过点击复选框用户 selects 区域。 Ajax returns 所有与 selected 区域关联的记录。然后用户可以仅对 5 个可用列中的一个进行排序,例如身高、体重和年龄..
到目前为止我的代码。
控制器:
@search = @adver.search(params[:q])
@search.sorts = ['height asc','age asc','votes_for.size asc'] if @search.sorts.empty?
@advertisements = @search.result(distinct: true)
查看:
1- 选择区域
<%= search_form_for @search, :id=>"search_regions",:remote=>"true", url: advertisements_path, :method => :get do |f| %>
<% @regions.each_slice(20) do |slice| -%>
<div class="pull-left">
<ul>
<% slice.each do |region| -%>
<li>
<%= check_box_tag 'q[region_id_eq_any][]', region.id, false, :required => false, :id => region.id ,:html =>{:class=>"region-checkboxes"}, :onchange=>"$('#search_regions').submit();"%>
<label style="left: 0px;" for=<%=region.id%>><span><%=region.name%> </span>
</li>
<% end -%>
</ul>
</div>
<% end -%>
<%end%>
****2 - Sorts by columns****
<%= search_form_for @search, :class=>"search",:remote=>"true", url: advertisements_path, :method => :get do |f| %>
<%= f.text_field :name_or_phone_number_or_identifier_cont, :id=>"search-field-keyup",:class=>"form-control",:placeholder => "Meklēt pēc ID,vārda vai telefona numura" %>
<%= sort_link(@search, :height,"AUGUMS",{},{ :remote => true, :method => :get }) %>
<%= sort_link(@search, :age,"VECUMS", {hide_indicator: false},{ :remote => true, :method => :get }) %>
<%= sort_link(@search, 'votes_for.size',"REITINGS", {hide_indicator: false},{ :remote => true, :method => :get }) %>
<%end%>
问题:
当我 select region Ajax returns 所有关联记录如预期。例如,当我想按高度排序时,先前的搜索将被清除并且 ajax 对所有记录进行排序,而不仅仅是那些在所选区域中的记录。
这是因为我有单独的搜索表单,但具有相同的名称@?
任何其他方式来实现这一点。 ?
提前感谢您的宝贵时间。
This is because I have separate search forms
是的,你完全正确:问题是你有两种不同的形式。当用户以后一种形式做出决定时,第一种形式的数据留在上面。浏览器不发送有关 region
的信息以及 height
或 age
,这最终导致错误的 sorting/filtering.
我在这里要做的是附加一些 javascript
函数来处理第二个表单的提交。此函数将从第二个表单中获取数据,从第一个表单中手动添加所选 region
的值,并将其发送到服务器。
我有 Rails 4 应用程序 Ransack 用于搜索和排序。
到目前为止,我设法使用 Ajax 进行了搜索和排序。效果很好。
首先通过点击复选框用户 selects 区域。 Ajax returns 所有与 selected 区域关联的记录。然后用户可以仅对 5 个可用列中的一个进行排序,例如身高、体重和年龄..
到目前为止我的代码。
控制器:
@search = @adver.search(params[:q])
@search.sorts = ['height asc','age asc','votes_for.size asc'] if @search.sorts.empty?
@advertisements = @search.result(distinct: true)
查看: 1- 选择区域
<%= search_form_for @search, :id=>"search_regions",:remote=>"true", url: advertisements_path, :method => :get do |f| %>
<% @regions.each_slice(20) do |slice| -%>
<div class="pull-left">
<ul>
<% slice.each do |region| -%>
<li>
<%= check_box_tag 'q[region_id_eq_any][]', region.id, false, :required => false, :id => region.id ,:html =>{:class=>"region-checkboxes"}, :onchange=>"$('#search_regions').submit();"%>
<label style="left: 0px;" for=<%=region.id%>><span><%=region.name%> </span>
</li>
<% end -%>
</ul>
</div>
<% end -%>
<%end%>
****2 - Sorts by columns****
<%= search_form_for @search, :class=>"search",:remote=>"true", url: advertisements_path, :method => :get do |f| %>
<%= f.text_field :name_or_phone_number_or_identifier_cont, :id=>"search-field-keyup",:class=>"form-control",:placeholder => "Meklēt pēc ID,vārda vai telefona numura" %>
<%= sort_link(@search, :height,"AUGUMS",{},{ :remote => true, :method => :get }) %>
<%= sort_link(@search, :age,"VECUMS", {hide_indicator: false},{ :remote => true, :method => :get }) %>
<%= sort_link(@search, 'votes_for.size',"REITINGS", {hide_indicator: false},{ :remote => true, :method => :get }) %>
<%end%>
问题:
当我 select region Ajax returns 所有关联记录如预期。例如,当我想按高度排序时,先前的搜索将被清除并且 ajax 对所有记录进行排序,而不仅仅是那些在所选区域中的记录。
这是因为我有单独的搜索表单,但具有相同的名称@? 任何其他方式来实现这一点。 ?
提前感谢您的宝贵时间。
This is because I have separate search forms
是的,你完全正确:问题是你有两种不同的形式。当用户以后一种形式做出决定时,第一种形式的数据留在上面。浏览器不发送有关 region
的信息以及 height
或 age
,这最终导致错误的 sorting/filtering.
我在这里要做的是附加一些 javascript
函数来处理第二个表单的提交。此函数将从第二个表单中获取数据,从第一个表单中手动添加所选 region
的值,并将其发送到服务器。