Move common pagination code to mixin
This commit is contained in:
parent
65d8d12a4d
commit
addf99f191
4 changed files with 34 additions and 38 deletions
27
app/controllers/concerns/pagination_methods.rb
Normal file
27
app/controllers/concerns/pagination_methods.rb
Normal file
|
@ -0,0 +1,27 @@
|
|||
module PaginationMethods
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
private
|
||||
|
||||
##
|
||||
# limit selected items to one page, get ids of first item before/after the page
|
||||
def get_page_items(items, includes)
|
||||
id_column = "#{items.table_name}.id"
|
||||
page_items = if params[:before]
|
||||
items.where("#{id_column} < ?", params[:before]).order(:id => :desc)
|
||||
elsif params[:after]
|
||||
items.where("#{id_column} > ?", params[:after]).order(:id => :asc)
|
||||
else
|
||||
items.order(:id => :desc)
|
||||
end
|
||||
|
||||
page_items = page_items.limit(20)
|
||||
page_items = page_items.includes(includes)
|
||||
page_items = page_items.sort.reverse
|
||||
|
||||
newer_items_id = page_items.first.id if page_items.count.positive? && items.exists?(["#{id_column} > ?", page_items.first.id])
|
||||
older_items_id = page_items.last.id if page_items.count.positive? && items.exists?(["#{id_column} < ?", page_items.last.id])
|
||||
|
||||
[page_items, newer_items_id, older_items_id]
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue