使用 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 的信息以及 heightage,这最终导致错误的 sorting/filtering.

我在这里要做的是附加一些 javascript 函数来处理第二个表单的提交。此函数将从第二个表单中获取数据,从第一个表单中手动添加所选 region 的值,并将其发送到服务器。