will_paginate和acts_as_indexed会产生奇怪的分页结果

时间:2013-02-06 20:09:34

标签: ruby-on-rails pagination will-paginate ruby-on-rails-2

我正在使用acts_as_indexed和will_paginate实现搜索功能。我正在使用Ruby 1.8.7和Rails 2.3.11。不,我无法升级Ruby,因为我正在使用共享主机。

经常使用'paginate'方法会产生预期的结果,但是当使用'paginate_search'(acts_as_indexed分页方法)时,我会得到奇怪的结果:

- 葡萄酒都是从数据库中检索出来的(我查看了日志,查询看起来不错) - 这是分页,导致不一致的“每页”结果

假设搜索结果为3个对象:

将每页设置为1,得到18页,除第4,12和18页外没有结果 将每页设置为2,得到9页全部没有结果,除了第2,6和9页(请参见此处的模式?)
将每页设置为3,除了第2,4和6页之外,所有6页都没有结果 - 所有上述模式每个结果页面产生1个结果

所以等等......似乎有一些时髦的数学,但我不知道在哪里或为什么。

1 个答案:

答案 0 :(得分:0)

好吧我找到了解决问题的方法。基本上我在搜索功能中加入了一个条件,它只是以某种方式搞砸了它。这是一个简单的"股票> 0"字符串,我不知道为什么它与acts_as_indexed混乱,但无论如何。解决方法是添加一个名为' stocked'的搜索属性。任何有库存的产品都可以通过“库存”这样的术语进行搜索。任何没有库存的葡萄酒都没有这个属性。而不是将:conditions参数放入搜索方法中,我只是附加了'放养'必要时将字符串转换为搜索字符串。它现在有效。下面的代码片段:

<强> Wine.rb

# ... = indicates other attributes
acts_as_indexed :fields => [..., :stock_search]

def stock_search
    'stocked' if stock > 0
end

<强> wines_controller.rb

srch = "#{ safe_tags * " " }#{ ' stocked' if params[:search_all].nil? }"
@wines = Wine.paginate_search(srch, :page => pg, :per_page => 10, :include => [{:awards => [:medal, :competition]}, {:reviews => :reviewer}])

所以回顾一下:

这有效:Wine.paginate_search("cabernet stocked", :page => pg, :per_page => 10)

这并不是:Wine.paginate_search("cabernet", :conditions => "stock > 0", :page => pg, :per_page => 10) ......从技术上来说搜索是有效的,但是分页并没有。

希望如果他们遇到同样的问题,这会有所帮助。