1

在对 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 件,则它们会显示得很好。

我可以在其他地方找到的唯一类似的报告问题是通过将:pageand:per_page参数传递给search函数来解决的,但我已经这样做了,但无济于事。

4

2 回答 2

5

Tire 有一个分页模块,但它没有定义offset. 您可以向他们提交问题以添加它,但同时您可以在您的应用程序中对其进行猴子补丁:

Tire::Results::Pagination.module_eval do
  def offset
    (@options[:per_page] || @options[:size] || 10 ).to_i * (current_page - 1)
  end
end
于 2011-09-05T23:36:19.987 回答
1

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

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

于 2011-09-06T10:36:38.783 回答