about summary refs log tree commit diff
path: root/app/models/concerns/paginable.rb
diff options
context:
space:
mode:
authortateisu <tateisu@gmail.com>2020-09-13 00:09:49 +0900
committerGitHub <noreply@github.com>2020-09-12 17:09:49 +0200
commitfa0c71f0d92ed5587859710dde3b076ec64b1498 (patch)
treef2ffcd1a106281213c8192e771bf59211410e8a6 /app/models/concerns/paginable.rb
parent4e4b3a0c8e69a724e229f028896ce774ef26df3b (diff)
allow pagination by min_id and max_id (#14776)
* allow pagination by min_id and max_id

* also AccountConversation allows min_id,max_id pair

* also home,list TL allows min_id,max_id pair
Diffstat (limited to 'app/models/concerns/paginable.rb')
-rw-r--r--app/models/concerns/paginable.rb5
1 files changed, 3 insertions, 2 deletions
diff --git a/app/models/concerns/paginable.rb b/app/models/concerns/paginable.rb
index 760cc3df4..62e39f671 100644
--- a/app/models/concerns/paginable.rb
+++ b/app/models/concerns/paginable.rb
@@ -14,15 +14,16 @@ module Paginable
     # Differs from :paginate_by_max_id in that it gives the results immediately following min_id,
     # whereas since_id gives the items with largest id, but with since_id as a cutoff.
     # Results will be in ascending order by id.
-    scope :paginate_by_min_id, ->(limit, min_id = nil) {
+    scope :paginate_by_min_id, ->(limit, min_id = nil, max_id = nil) {
       query = reorder(arel_table[:id]).limit(limit)
       query = query.where(arel_table[:id].gt(min_id)) if min_id.present?
+      query = query.where(arel_table[:id].lt(max_id)) if max_id.present?
       query
     }
 
     def self.to_a_paginated_by_id(limit, options = {})
       if options[:min_id].present?
-        paginate_by_min_id(limit, options[:min_id]).reverse
+        paginate_by_min_id(limit, options[:min_id], options[:max_id]).reverse
       else
         paginate_by_max_id(limit, options[:max_id], options[:since_id]).to_a
       end