will_paginate с включенными результатами повторного заказа - PullRequest
0 голосов
/ 03 декабря 2010

Рельсы 2.3.8 + will_paginate 2.3.14

У меня есть модели Product и ProductReview.

Product

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 голосов
/ 03 декабря 2010

Вероятно, ограничение на разбиение на страницы применяется к результатам объединения, которые представляют собой строки с кратностью количества отзывов о товаре.Я не нашел лучшего решения этой проблемы, кроме перемещения критериев области в вызов нумерации страниц (затем можно переместить вызов нумерации в именованную область).Именованные области видимости просто не работают с will_paginate.

...