gem kaminariについて
kaminariとは
ページネーション機能を簡単に実装できるgemです。
また、カスタマイズも柔軟に行うことができるのもポイントです。
gem kaminari
をbundleするだけで使用可能になります。
基本的な使用方法
controllers/users_controller.rb class BoardsController < ApplicationController def index @users = User.page(params[:page]) end
users/index.html.erb <%= paginate @users %>
凄く簡単に実装できます!!
bootstrap4を適用する
初期状態は以下のようになっています。(事前にbootstrapをインストールしています)
kaminariではいくつかのテーマが準備されており、それを簡単に適用させることができます。
参考
GitHub - amatsuda/kaminari_themes
以下を実行します。
rails g kaminari:views bootstrap4 -e erb
Trunscate
を表示させたくない場合は、kaminari/_gap.html.erb
を削除するか中身をコメントアウトしてください。
デフォルトの設定を行う
モデルで共通の設定を行うには以下を実行します。
rails g kaminari:config # => create config/initializers/kaminari_config.rb
作成されたファイルの中身です
config/initializers/kaminari_config.rb Kaminari.configure do |config| # config.default_per_page = 25 # config.max_per_page = nil # config.window = 4 # config.outer_window = 0 # config.left = 0 # config.right = 0 # config.page_method_name = :page # config.param_name = :page # config.max_pages = nil # config.params_on_first_page = false end
config.default_per_page
1ページで表示するレコード数を設定します。デフォルトは25
です。
例
config.default_per_page = 10 # コンソール > User.page(1).limit_value #=> limit_valueはkaminariが提供するメソッドです。 => 10 # => 設定が適応されているのが分かります。
各モデルで設定するにはpaginates_per
を使用します。
class User < ActiveRecord::Base paginates_per 20 end # コンソール > User.page(1).limit_value => 20
config.max_per_page
1ページで表示するレコード数の最大数を設定できます。デフォルトはnil
で設定されていません。
もし、値が設定されており、 per scopeで設定した値がそれよりも大きければmax_per_page
の値が適応されます。
例
config.default_per_page = 25 config.max_per_page = 10 # コンソール > User.page(1).limit_value => 10
各モデルで設定するにはmax_paginates_per
を使用します。
class User < ActiveRecord::Base max_paginates_per 100 end
config.max_pages
表示されるページ数の最大数を設定できます。デフォルトはnil
で設定されていません。
例
# nilの場合は5ページのリンクが作成されるとする。 config.max_pages: 2 # コンソール User.page(1).total_pages # => total_pageはkaminariが提供するメソッドです => 2
各モデルで設定するにはmax_pages
を使用します。
class User < ActiveRecord::Base max_pages 5 end
config.page_method_name
メソッド名を変更できます。デフォルトは:page
です
例
config.page_method_name = :hoge # コンソール > User.page(0).limit_value => undefined method `page' > User.hoge(0) => 5
config.param_name
parameterから値を取得する際の名称を変更できる。デフォルトは:page
です。
config.window
現在のページの両脇に表示されるリンクの最大数を設定します。デフォルトは4
です。
デフォルトの場合
現在のページが5で、両脇に4個ずつリンクが表示されます。
config.window = 2
と設定した場合
両脇に2個ずつしかリンクが表示されません。
個々のhtmlで設定する場合はpaginate
の引数で指定できます。
<%= paginate @users, window: 2 %>
config.outer_window
「...」(truncate)の外側に表示されるリンク数を指定できます。デフォルトは0
です
onfig.outer_window = 3
とした場合
個々のhtmlで設定する場合はpaginate
の引数で指定できます。
<%= paginate @users, outer_window: 3 %>
config.left、 config.right
「...」(truncate)の外側に表示されるリンク数を左右で指定できます。デフォルトは0
です。
config.left = 3、 config.right = 2
とした場合
個々のhtmlで設定する場合はpaginate
の引数で指定できます。
<%= paginate @users, left: 3, right: 2 %>
その他
他にもI18nを使用して日本語化したり、多くのメソッドを使用できるので公式を確認してみてください。