2013-08-01 78 views
0

我使用ransack來根據用戶的公司和活動/非活動參數搜索用戶。單獨使用時效果很好,但我想同時使用兩者。例如,如果我先選擇公司,然後選擇有效/無效用戶,那麼公司名稱應該保留。如何堅持搜索搜索參數

其次,當我點擊或再次點擊用戶時,是否存在一個在搜索引擎中保留這兩個值的工具?

UPDATE:

這是我的看法:

= 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

是否存在嵌套問題? '%div.sort_users'應該在搜索表單中。 –

+0

是的,它在一邊..更新 – User16119012

+0

你爲什麼不給一個具體的例子?例如這些是我的記錄,這些查詢返回給出 –

回答

2

關於持久性過濾器的代碼,我用下面的ApplicationControllerbefore_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 

這樣,如果interventions_path被稱爲無q PARAM,cookies['query_interventions']檢查訪問上次持續查詢。但是當interventions_pathq參數一起被調用時,將使用此新查詢並保留以備後用。

而且,如果interventions_path被稱爲與clear PARAM,cookie將被刪除。

注意這將提高CookieOverflow異常,如果超過4K存儲,但這是1024 and 4096 UTF-8 characters之間,它一般是沒有問題。如果沒有,您應該使用其他類型的會話存儲。