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をインストールしています)

Image from Gyazo

kaminariではいくつかのテーマが準備されており、それを簡単に適用させることができます。
参考

GitHub - amatsuda/kaminari_themes

以下を実行します。

rails g kaminari:views bootstrap4 -e erb 

Image from Gyazo

Trunscateを表示させたくない場合は、kaminari/_gap.html.erbを削除するか中身をコメントアウトしてください。

Image from Gyazo

デフォルトの設定を行う

モデルで共通の設定を行うには以下を実行します。

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個ずつリンクが表示されます。

Image from Gyazo

config.window = 2と設定した場合
両脇に2個ずつしかリンクが表示されません。

Image from Gyazo

個々のhtmlで設定する場合はpaginateの引数で指定できます。

<%= paginate @users, window: 2 %>

config.outer_window

「...」(truncate)の外側に表示されるリンク数を指定できます。デフォルトは0です

onfig.outer_window = 3とした場合

Image from Gyazo

個々のhtmlで設定する場合はpaginateの引数で指定できます。

<%= paginate @users, outer_window: 3 %>

config.left、 config.right

「...」(truncate)の外側に表示されるリンク数を左右で指定できます。デフォルトは0です。

config.left = 3、 config.right = 2 とした場合

Image from Gyazo

個々のhtmlで設定する場合はpaginateの引数で指定できます。

<%= paginate @users, left: 3, right: 2 %>

その他

他にもI18nを使用して日本語化したり、多くのメソッドを使用できるので公式を確認してみてください。

github.com