我正在使用ransack根据用户的公司和活动/非活动参数进行搜索。单独使用时效果很好,但我想同时使用它们。例如,如果我先选择公司然后选择活动/非活动用户,那么公司名称应该保持不变。
第二,当我向用户点击或再次点击用户时,是否有搜索工具可以保持这两个值的持续存在?
更新:
这是我的观点:
= search_form_for @search, url: search_users_path, method: :post, html: { class: 'sort' } do |f|
= f.label 'company:'
= f.select :company_id_eq,
Company.where('is_inactive = false').collect {|c| [ c.name, c.id ] },
{:include_blank => 'All company users'}, :'data-remote' => true, class: 'searchSelect searchUserSelect'
%div.sort_users
= f.label 'sort Users:'
= f.select :deleted_eq,
[raw("<option value= 0 selected=#{session[:deleted]}>Active Users</option><option value= 1>Inactive Users</option>")],
{}, :'data-remote' => true, class: 'searchSelect searchUserSelect', style: "width: 205px;"
这是我在控制器中的代码
@search = User.search(params[:q])
@users = @search.result.includes(:company).order("companies.name, last_name").page(params[:page]).per(20)
答案 0 :(得分:3)
关于过滤器持久性,我在before_action
中使用以下ApplicationController
:
def get_query(cookie_key)
cookies.delete(cookie_key) if params[:clear]
cookies[cookie_key] = params[:q].to_json if params[:q]
@query = params[:q].presence || JSON.load(cookies[cookie_key])
end
然后,对于Intervention
模型,我有以下内容:
class InterventionsController < ApplicationController
before_action only: [:index] do
get_query('query_interventions')
end
def index
@q = Intervention.search(@query)
@interventions = @q.result
end
end
这样,如果在没有interventions_path
参数的情况下调用q
,则会检查cookies['query_interventions']
以访问上次持久查询。但是当使用interventions_path
参数调用q
时,会使用此新查询并将其保留以供日后使用。
此外,如果使用interventions_path
参数调用clear
,则会删除Cookie。
注意如果存储的值超过4k,则会引发CookieOverflow
异常,但这是1024 and 4096 UTF-8 characters之间的通常可以。如果没有,您应该使用其他类型的会话存储。