【问题标题】:How to persist ransack searching parameters如何持久化 ransack 搜索参数
【发布时间】:2013-08-01 14:39:34
【问题描述】:

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

【问题讨论】:

  • 是否存在嵌套问题? %div.sort_users 应该在搜索表单中。
  • 是的,它在里面……更新了
  • 为什么不举个具体的例子呢?例如这些是我的记录,这些是给定这个查询返回的

标签: ruby ruby-on-rails-3 ransack


【解决方案1】:

关于过滤器持久性,我在ApplicationController中使用了以下before_action

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

这样,如果在没有 q 参数的情况下调用 interventions_path,则检查 cookies['query_interventions'] 以访问最后一个持久查询。但是,当使用 q 参数调用 interventions_path 时,会使用并保留此新查询以供以后使用。

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

请注意,如果存储超过 4k,这将引发 CookieOverflow 异常,但这在 1024 and 4096 UTF-8 characters 之间,通常没问题。如果没有,您应该使用其他类型的会话存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多