diff --git a/kaminari-core/lib/kaminari/models/page_scope_methods.rb b/kaminari-core/lib/kaminari/models/page_scope_methods.rb index 89a71bced..1c2cce38f 100644 --- a/kaminari-core/lib/kaminari/models/page_scope_methods.rb +++ b/kaminari-core/lib/kaminari/models/page_scope_methods.rb @@ -5,14 +5,12 @@ module PageScopeMethods # Model.page(3).per(10) def per(num, max_per_page: nil) max_per_page ||= ((defined?(@_max_per_page) && @_max_per_page) || self.max_per_page) - @_per = num - if num.nil? && max_per_page - limit(max_per_page).offset(offset_value / limit_value * max_per_page) - elsif (n = num.to_i) < 0 || !(/^\d/ =~ num.to_s) + @_per = num || default_per_page + if (n = num.to_i) < 0 || !(/^\d/ =~ num.to_s) self elsif n.zero? limit(n) - elsif max_per_page && max_per_page < n + elsif max_per_page && (max_per_page < n) limit(max_per_page).offset(offset_value / limit_value * max_per_page) else limit(n).offset(offset_value / limit_value * n) diff --git a/kaminari-core/test/models/active_record/scopes_test.rb b/kaminari-core/test/models/active_record/scopes_test.rb index 1c1f3f9cb..3710145bf 100644 --- a/kaminari-core/test/models/active_record/scopes_test.rb +++ b/kaminari-core/test/models/active_record/scopes_test.rb @@ -97,6 +97,16 @@ def shutdown assert_equal model_class.default_per_page, model_class.page(1).per(nil).count end + test 'page 1 per nil with max_per_page > default_per_page' do + begin + model_class.max_paginates_per(30) + + assert_equal 25, model_class.page(1).per(nil).count + ensure + model_class.max_paginates_per(nil) + end + end + test 'page 1 per nil with max_per_page < default_per_page' do begin model_class.max_paginates_per(10)