【问题标题】:will_paginate and acts_as_indexed produces odd pagination resultswill_paginate 和acts_as_indexed 产生奇怪的分页结果
【发布时间】:2013-01-22 04:02:36
【问题描述】:

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

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

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

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

将 per-page 设置为 1,得到 18 个页面,除了第 4、12 和 18 页之外,所有页面都没有结果
将每页设置为 2,得到 9 个页面,除了第 2、6 和 9 页之外,所有页面都没有结果(在此处查看模式?)
将每页设置为 3,得到 6 个页面,除了第 2、4 和 6 页外,所有页面都没有结果
- 以上所有模式在每个结果页面产生 1 个结果

等等……似乎有一些时髦的数学正在发生,但我不知道在哪里或为什么。

【问题讨论】:

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


    【解决方案1】:

    好吧,我想出了解决这个问题的方法。本质上,我在搜索功能中设置了一个条件,这只是以某种方式搞砸了。这是一个简单的“stock > 0”字符串,我不知道为什么它会与acts_as_indexed 混淆,但无论如何。解决方法是添加一个名为“stocked”的搜索属性。任何有库存的产品都可以通过“库存”一词进行搜索,而任何没有库存的葡萄酒都不会具有该属性。我没有在搜索方法中加入 :conditions 参数,而是在必要时将“stocked”字符串附加到搜索字符串中。现在可以了。代码如下:sn-ps:

    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) ...从技术上讲,搜索可以正常工作,但分页却不行。

    希望这对遇到同样问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多