1

我正在使用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)
4

1 回答 1

4

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的情况下调用if,则检查是否访问最后一个持久化查询。但是,当使用参数调用时,会使用并保留这个新查询以供以后使用。qcookies['query_interventions']interventions_pathq

此外,如果interventions_path使用参数调用clear,cookie 将被删除。

请注意,如果存储超过 4k,这将引发CookieOverflow异常,但这介于1024 到 4096 个 UTF-8 字符之间,通常是可以的。如果没有,您应该使用其他类型的会话存储。

于 2014-08-05T15:07:40.683 回答