Pagination For Ruby on Rails Applications With Pagy

Richard Gonsales December 19, 2023

Rendering large or indefinite collection of objects require the basic optimization by implementing pagination. Aside from performance improvements, pagination also reduces server load by fetching and delivering a smaller amount of the data. For the users, it is more convenient to navigate through pages than scrolling through a very long list. Pagination provides a predictable and consistent user interface and transmitting smaller amount of data per request therefore saves bandwidth.

One salient point for pagination is the benefit for SEO. Search engines favor pages that load quickly and with good user experience.

To date, kaminari, will_paginate and pagy are the top 3 pagination gems respectively in terms of the project score based on The Ruby Toolbox. The project score is determined by the number of downloads from rubygems and the project’s github stars and forks. Unfortunately, the latest version release of kaminari was 2 years ago.

A couple of developers made a project to benchmark and compare the performances of top 3 pagination gems. pagy so far outperforms kaminari and will_paginate on a lot of factors.

Let’s get started! If you have an existing application using either will_paginate or kaminari, follow this migration steps to get pagy up and running on your project. For new projects, follow along for the quick start guide:

Install

If you are using Bundler, add the gem in the Gemfile, like so:

gem 'pagy', '~> 6.2' # check rubygems.com for the latest version, omit patch digit

Configure

Download the configuration file and save it into the config/initializers folder.

Backend Setup

Add a line for ApplicationController, like so:


class ApplicationController < ActionController::Base
  include Pagy::Backend
end

And use the pagy method in your controllers.

@pagy, @records = pagy(Product.some_scope)

Render the Pagination

On the ApplicationHelper file, add the line:


module ApplicationHelper
  include Pagy::Frontend
end

and use pagy_nav helper:

<%== pagy_nav(@pagy) %>

That easy! Visit the Pagy website, for more customization, how-to’s and all the API documentation.

Thanks for reading, no matter your software problem, we provide a complete solution to scope, design, develop, test, host, maintain and support it 24/7/365. Contact us to discover how we can bring your ideas to reality!