2014-02-09 52 views
0

它看起來像我可以用一個或另一個但不是兩者,任何人對如何做到這一點的例子嗎?問題是,爲了使用will_paginate,我必須使用的搜索方法的模型如何同時使用will_paginate和過濾器與輪胎(彈性搜索)

Item.search("test", :page => 1, :per_page => 20) 

但爲了使用過濾器,我必須直接使用輪胎:

search = Tire::Search::Search.new("items") 
search.filter :term, :selected => true 

但我無法找到如何做到這一點。感謝您的任何建議。

回答

0

我還沒有使用這個庫,但據我可以從源代碼中找出來,Model#search和Tire :: Search :: Search應該採用相同的選項。如果你看一下產品型號#搜索源代碼,它這樣做(減少到相關部分):

def search(*args, &block) 

    query, options = args 

    s = Tire::Search::Search.new(options.delete(:index), options) 

這樣的選擇是通過對輪胎::搜索::搜索的初始化只是遞給。

但是,這只是創建對象。輪胎::搜索::搜索似乎在內部使用術語sizefrom而不是per_pagepage。所以上面的代碼將繼續這樣的:

page  = options.delete(:page) 
    per_page = options.delete(:per_page) || Tire::Results::Pagination::default_per_page 

    s.size(per_page.to_i) if per_page 
    s.from(page.to_i <= 1 ? 0 : (per_page.to_i * (page.to_i-1))) if page && per_page 

如此看來from作品從不同page(而sizeper_page是相似的)。 from是絕對的位置。 (我不知道Tire :: Results :: Pagination :: default_per_page在這裏增加了什麼,或許可以設置一些默認值。)

爲了得出結論,我的教育猜測應該是這樣的爲你工作:

search = Tire::Search::Search.new("items", size: 20, from: 0) 

其中用於其他頁面位置,你會計算(per_page *(頁面 - 1))

相關問題