Ransack高级搜索表单完整

时间:2018-01-30 04:40:55

标签: ruby-on-rails ransack search-form

我正在使用ransack提前搜索我的一个项目。 我遇到了一个问题,如果我进行搜索并保存查询,我无法再使用这些查询重建搜索表单。我正在寻找的是,当我进行搜索时,我应该能够再次使用相同的值再次查看相同的表单。

布局/ _search.html.erb

<%= search_form_for @search, url: url, method: :post, class: search_form_class, remote: true do |f| %>
    <%= f.condition_fields do |c| %>
    <%= render "layouts/condition_fields", f: c %>
  <% end %>
  <%= f.submit %>
<% end %>

布局/ _condition_fields.html.erb

<div class="field">
  <%= f.attribute_fields do |a| %>
    <%= a.attribute_select %>
  <% end %>
  <%= f.predicate_select %>
  <%= f.value_fields do |v| %>
    <%= v.text_field :value %>
  <% end %>
  <%= link_to "remove", '#', class: "remove_fields" %>
</div>

people_controllers.rb

  def index
    @search = Person.ransack(params[:q])
    @people = @search.result(distinct: true)
    @search.build_condition
    respond_to do |format|
      format.html
    end
  end

人/ index.html.erb

<%= render :partial => 'layouts/search', :locals => {:search => @search, :url => search_people_path, search_form_class: 'all_person'} %>
<div class="searchResult">
    <%= render :partial => 'layouts/search_result', :locals => {:People => @people} %>

布局/ _search_result.html.erb

<div class="box">
    <div class="box-body">
        <table class="table table-bordered">
            <tbody>
                <tr>
                    <th>id</th>
                    <th>name</th>
                    <th>email</th>
                </tr>
                <% @people.each do  |person|  %>
                    <tr>
                        <td>
                            <%= person.id %>
                        </td>
                        <td>
                            <%= person.name %>
                        </td>
                        <td>
                            <%= person.email %>
                        </td>
                    </tr>
                <% end %>
            </tbody>

    </table>    
    </div>
</div>

现在,当我进入视图时,它现在出现了。

ransack advance search

看起来有人会问类似问题here

我完全想要同样的事情。

  1. 如何保存表单搜索值并保存这些详细信息以供日后查询
  2. 通过采用现有查询生成表单来编辑已保存的查询

2 个答案:

答案 0 :(得分:1)

对于以后阅读此文章的人:您可以使用params[:q]值的存在(如果有)将默认值应用于搜索字段。有点小巧,但是非常简单,可以满足您的需求。

这里有些东西可以满足您的需求:

<div class="form-group">
    <%= f.label :person_name_cont %>
    <% if params[:q] && params[:q][:person_name_cont]  %>
      <%= f.select :person_name_cont, Person.all.map(:name), {:include_blank => true, :selected => params[:q][:person_name_cont]} %>
    <% else %>
      <%= f.select :person_name_cont, Person.all.map(:name), {:include_blank => true} %>
    <% end %>
  </div>

答案 1 :(得分:0)

据我了解,您希望将此查询保存为favorite,因此您应该创建favorite模型

rails g model favorite url:string

您正在执行的查询将作为get请求传递到url。

例如http://localhost:3000/peoples?page=2&sort=newest&pagesize=15

此查询正在使用参数

在网址get上执行http://localhost:3000/people请求
people[:page] = 2
people[:sort] = newest
....

您可以在页面上添加星标图标perform an ajax request as described here,这会触发favorites#create操作

def create
    Favorite.create(favorite_params)
end