轮胎搜索和will_paginate - 未定义的方法`offset'

时间:2011-09-05 10:15:49

标签: ruby-on-rails will-paginate elasticsearch

在使用ThinkingSphinx和Solr / Sunspot头痛之后,我们尝试将ElasticSearch和Tire作为我们的搜索后端 - 但我遇到了问题。

这是我在控制器中的搜索命令:

@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函数来解决的,但我已经这样做了,但无济于事。

2 个答案:

答案 0 :(得分:5)

轮胎有a Pagination module,但没有定义offset。您可以向他们提出问题以添加它,但在此期间您可以在应用中对其进行monkeypatch:

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

答案 1 :(得分:1)

在我的testapp中,结果分散得很好,will_paginate 3.0tire 0.3。我不知道will_paginate 需要 offset方法。

我添加了它,但是,复制will_paginate规范中的“lint”测试:https://github.com/karmi/tire/commit/e0e7730。应该是下一个版本的一部分。