Я использую Kaminari для разбиения на страницы некоторого результата из запроса, в котором я выбираю разные записи. Рассмотрим следующий код контроллера:
@things = Thing.joins... # create a complex query that produces duplicate results
# I want to select distinct results: this produces the correct results
@things = @things.select("DISTINCT things.*")
# when Kaminari calls count, it will run "SELECT COUNT(*)", instead of
# "SELECT COUNT(DISTINCT things.*)" we will get the wrong count and extra pages
@things = @things.page(params[:page]).per(10)
Лучшее решение, которое я могу придумать, - это передать :distinct => true
в count
, как в этом запросе на получение , который был отклонен разработчиком Kaminari. Этот вопрос SO обсуждает основную проблему. Эта строка кода является вызывающим вызовом count
.
Существуют ли какие-либо обходные пути, которые обеспечат Каминари точным подсчетом, который не включает исправление Каминари? Благодарю.
UPDATE:
- Использование области действия с именем count является отличным предложением, но не работает при вызове ActiveRecord :: Relation. Он работает при вызове в моем классе модели, но это не помогает.