Global and Per-Model Configuration
will_paginate allows you to configure the default number of items per page both globally and on a per-model basis.
Global Configuration
You can set a site-wide default for per_page by setting WillPaginate.per_page. This is best done in an initializer file within your application.
For a Rails application, create a file like config/initializers/will_paginate.rb:
# config/initializers/will_paginate.rb
# Set the default number of items per page to 10
WillPaginate.per_page = 10
This value will be used for any pagination query that does not have a per_page value specified at the model level or in the paginate call itself.
Per-Model Configuration
You can also override the global default for specific models by defining the per_page class method within the model itself.
# app/models/post.rb
class Post < ApplicationRecord
# Set the number of items per page for the Post model to 20
self.per_page = 20
end
Now, any call to Post.paginate or Post.page will default to 20 items per page unless explicitly overridden in the method call.
Precedence
The per_page value is determined in the following order of precedence (from highest to lowest):
-
Method Argument: The value passed directly to the
paginateorper_pagemethod.Post.paginate(page: 1, per_page: 5) # 5 items per page -
Model-Specific Setting: The value set with
self.per_pagein the model.# Assuming self.per_page = 20 in Post model Post.paginate(page: 1) # 20 items per page -
Global Setting: The value set with
WillPaginate.per_page.# Assuming WillPaginate.per_page = 10 User.paginate(page: 1) # 10 items per page (if User has no specific setting)