X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/65d8d12a4d3bb190c0d7d38dbf7bb566473635dc..addf99f1911ec617ba258e075a53d774dee2a672:/app/controllers/concerns/pagination_methods.rb diff --git a/app/controllers/concerns/pagination_methods.rb b/app/controllers/concerns/pagination_methods.rb new file mode 100644 index 000000000..58b522516 --- /dev/null +++ b/app/controllers/concerns/pagination_methods.rb @@ -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