From 35ac0ed454fbbd3e6a3cba510c06d1b268587640 Mon Sep 17 00:00:00 2001 From: Shanon McQuay Date: Fri, 13 Nov 2020 14:37:54 +1100 Subject: [PATCH] Preload kaminari collections to avoid counting --- lib/api-pagination.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/api-pagination.rb b/lib/api-pagination.rb index d8c94d2..0740797 100644 --- a/lib/api-pagination.rb +++ b/lib/api-pagination.rb @@ -96,6 +96,18 @@ def paginate_with_kaminari(collection, options, paginate_array_options = {}) collection = Kaminari.paginate_array(collection, paginate_array_options) if collection.is_a?(Array) collection = collection.page(options[:page]).per(options[:per_page]) + + if !collection.is_a?(Array) + if ApiPagination.config.include_total + # Preload to avoid counting if we are on the last page. + # + # See: https://github.com/kaminari/kaminari/blob/cd8601cc42b67267c15a13174bc2fc9bd5de1032/kaminari-activerecord/lib/kaminari/activerecord/active_record_relation_methods.rb#L20-L26 + collection.load + else + collection.without_count + end + end + collection.without_count if !collection.is_a?(Array) && !ApiPagination.config.include_total [collection, nil] end