Skip to content

Instantly share code, notes, and snippets.

@lazaronixon
Created December 16, 2025 16:33
Show Gist options
  • Select an option

  • Save lazaronixon/ddf6969b34739222f5084d0341e7f497 to your computer and use it in GitHub Desktop.

Select an option

Save lazaronixon/ddf6969b34739222f5084d0341e7f497 to your computer and use it in GitHub Desktop.
Paginable
# frozen_string_literal: true
module Paginable
extend ActiveSupport::Concern
DEFAULT_PAGE_SIZE = 20
def paginate(records)
records.limit(page_size).offset(page_offset)
end
def records_count(records)
records.unscope(:limit).unscope(:offset).unscope(:select).count
end
private
def page_offset
(page_number - 1) * page_size
end
def page_number
page_params.dig(:page, :number)&.to_i || 1
end
def page_size
page_params.dig(:page, :size)&.to_i || DEFAULT_PAGE_SIZE
end
def page_params
params.permit(page: %i[number size])
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment