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。应该是下一个版本的一部分。