diff --git a/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb b/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb index ed35fbe10..acaa31032 100644 --- a/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb +++ b/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb @@ -32,15 +32,13 @@ def total_count(column_name = :all, _options = nil) #:nodoc: c = c.limit(max_pages * limit_value) if max_pages && max_pages.respond_to?(:*) - # .group returns an OrderedHash that responds to #count - c = c.count(column_name) - @total_count = if c.is_a?(Hash) || c.is_a?(ActiveSupport::OrderedHash) - c.count - elsif c.respond_to? :count - c.count(column_name) - else - c - end + # Handle grouping with a subquery + @total_count = if c.group_values.any? + sq = c.except(:select).select("1 AS record").arel.as("subquery") + c.model.connection.select_value Arel::SelectManager.new.from(sq).project(sq[:record].count) + else + c.count(column_name) + end end # Turn this Relation to a "without count mode" Relation.