我正在使用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>
现在,当我进入视图时,它现在出现了。
看起来有人会问类似问题here!
我完全想要同样的事情。
答案 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