2011-09-05 48 views
1

在經歷了ThinkingSphinx和Solr /太陽黑子頭疼之後,我們嘗試使用ElasticSearch和Tire作爲我們的搜索後端 - 但我遇到了一個問題。輪胎搜索和will_paginate - 未定義的方法`偏移'

這裏的控制器我的搜索命令:

@results = Item.search params[:search], :page => (params[:page] || 1), :per_page => 20 

這是該視圖的問題部分:

<%= page_entries_info @results %> 

我得到的錯誤信息是

undefined method `offset' for #<Tire::Results::Collection:0xa3f01b0> 

但只有當頁面的結果不止一頁時。如果返回的項目少於20件,則顯示效果良好。

唯一的類似報告的問題,我可以在其他地方找到被:page:per_page參數傳遞到search功能解決了,但我已經這樣做,但沒有成功。

回答

5

輪胎有a Pagination module但它沒有定義offset。你可以提交一個問題,與他們進行添加,但在此期間,你可以在你的應用程序猴補丁吧:

Tire::Results::Pagination.module_eval do 
    def offset 
    (@options[:per_page] || @options[:size] || 10).to_i * (current_page - 1) 
    end 
end 
+0

嗨@mislav,或許像will_paginate兼容集合的「lint」測試會很好嗎?一些沿着ActiveModel :: Lint的線? – karmi

+0

事實證明,它也需要一個長度方法,但我也能夠修補它。謝謝! :) – PaulC

+0

@ karmi:是的,皮棉測試會很好。除非我早點實現,否則你總是可以貢獻它! ;) – mislav

1

在我testapp,結果分頁就好了,用will_paginate 3.0tire 0.3。我不知道will_paginate 需要offset方法。

我已經添加了它,但是,從will_paginate規格中複製「lint」測試:https://github.com/karmi/tire/commit/e0e7730。應該是下一個版本的一部分。