will_paginate with include重新排序结果

时间:2010-12-03 00:08:33

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

Rails 2.3.8 + will_paginate 2.3.14

我同时拥有Product和ProductReview模型。

产品

has_many :product_reviews, :dependent => :destroy
named_scope :most_recently_reviewed, :order => 'product_reviews.created_at desc', :include => [:product_reviews]

ProductReview

belongs_to :product, :counter_cache => true

使用和不使用分页运行最基本的查询会以完全不同的顺序返回项目。

Product.most_recently_reviewed.collect{|p| p.id }[0,9]
 => [1660, 1658, 2374, 578, 1595, 135, 531, 550, 1511]

Product.most_recently_reviewed.paginate(:page => 1, :per_page => 40).collect{|p| p.id }[0,9]
 => [1660, 2374, 578, 1711, 1855, 1730, 1668, 1654, 2198]

将per_page扩展为大于产品数的数字会导致paginate返回正确的结果:

Product.most_recently_reviewed.paginate(:page => 1, :per_page => 1000).collect{|p| p.id }[0,9]
=> [1660, 1658, 2374, 578, 1595, 135, 531, 550, 1511]

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

分页的限制可能会应用于联接的结果,这些行是产品评论数量的多样性。除了将范围标准移动到分页调用之外,我还没有找到更好的解决此问题的方法(然后您可以将分页调用移动到命名范围中)。命名范围似乎与will_paginate不兼容。