Skip to content

Instantly share code, notes, and snippets.

@spkprav
Last active April 13, 2016 08:07
Show Gist options
  • Save spkprav/a74eee40567ef0c53490a1d0b7db51b9 to your computer and use it in GitHub Desktop.
Save spkprav/a74eee40567ef0c53490a1d0b7db51b9 to your computer and use it in GitHub Desktop.
JSON Pagination using Kaminari
ERB File
# api/v1/posts/index.json.jbuilder
json.pagination paginate(@collection)

API Paginate Helper

Ruby
# app/helpers/api_helper
module ApiHelper
  def paginate(collection)
    current_page_num = collection.current_page
    last_page_num = collection.total_pages
    {
      first: first_page,
      previous: previous_page(current_page_num),
      self: current_page(current_page_num),
      next: next_page(current_page_num, last_page_num),
      last: last_page(last_page_num)
    }
  end

  def first_page
    { href: url_for(page: 1) }
  end

  def previous_page(current_page_num)
    return nil if current_page_num <= 1
    { href: url_for(page: current_page_num - 1) }
  end

  def current_page(current_page_num)
    { href: url_for(page: current_page_num) }
  end

  def next_page(current_page_num, last_page_num)
    return nil if current_page_num >= last_page_num
    { href: url_for(page: current_page_num + 1) }
  end

  def last_page(last_page_num)
    { href: url_for(page: last_page_num) }
  end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment