Skip to content

Instantly share code, notes, and snippets.

@be9
Created September 5, 2013 04:18
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save be9/6446051 to your computer and use it in GitHub Desktop.
Save be9/6446051 to your computer and use it in GitHub Desktop.
kaminari + JSON API pagination helper
def paginate(scope, default_per_page = 20)
collection = scope.page(params[:page]).per((params[:per_page] || default_per_page).to_i)
current, total, per_page = collection.current_page, collection.num_pages, collection.limit_value
return [{
pagination: {
current: current,
previous: (current > 1 ? (current - 1) : nil),
next: (current == total ? nil : (current + 1)),
per_page: per_page,
pages: total,
count: collection.total_count
}
}, collection]
end
@fernandommota
Copy link

Nice script.

Thanks!

@azmatrana
Copy link

In addition to the @AhmedKamal20 answer above.

Its better to use the pre given methods by kaminari gem for all the values. Also, in my case I also need the data as well so also added that as well in the pagination.

app/views/shared/_pagination.json.jbuilder

json.pagination do
  json.current         collection.current_page
  json.previous        collection.prev_page
  json.next            collection.next_page
  json.limit           collection.limit_value
  json.total_pages     collection.total_pages
  json.total_count     collection.total_count

  json.data            collection # if want to send the data as well. In my case I am sending data. 
end

@amiranda2510
Copy link

I'm using Rails + JSON API, and I'm having this error
Is it necessary to have the jsonapi-serializers gem to use this solution?
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment