Skip to content

Instantly share code, notes, and snippets.

@delba
Created May 21, 2013 13:38
Show Gist options
  • Select an option

  • Save delba/5619823 to your computer and use it in GitHub Desktop.

Select an option

Save delba/5619823 to your computer and use it in GitHub Desktop.
Simple pagination
class Article < ActiveRecord::Base
extend Pagination
self.per_page = 20
end
# Article.page(params[:page])
# Article.page(params[:page]).per_page(params[:per_page])
# Article.paginate(page: params[:page], per_page: params[:per_page])
module Pagination
attr_writer :per_page
def page(page)
set_page page
build_query
end
def per_page(per_page)
set_per_page per_page
build_query
end
def paginate(options = {})
extract_options options
build_query
end
private
def build_query
return all unless @page && @per_page
all.tap do |rel|
rel.limit = @per_page
rel.offset = @per_page * (@page - 1)
end
end
def extract_options(options)
set_page(options[:page]) if options.has_key?(:page)
set_per_page(options[:per_page]) if options.has_key?(:per_page)
end
def set_page(page)
@page = page ? page.to_i : 1
end
def set_per_page(per_page)
@per_page = per_page.to_i
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment