Принуждение ActiveRecord к подсчету различных записей (с Kaminari)

Я использую 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)

Лучшее решение, которое я могу придумать, - передать : independent => true в count , как в этот запрос на перенос ], который был отклонен разработчиком Каминари. Этот вопрос SO обсуждает основную проблему. Эта строка кода является оскорбительным вызовом count .

Существуют ли какие-либо обходные пути, которые предоставят Каминари правильный счетчик, не требующие исправления Каминари? Благодарю.

ОБНОВЛЕНИЕ:

  • Использование области действия под названием «count» - отличное предложение, но не работает при вызове ActiveRecord :: Relation. Он работает, когда вызывается в моем классе модели, но это не помогает.

5
задан Community 23 May 2017 в 12:04
поделиться