kaminariを使ったページネーションの実装
kaminariのセットアップ
まずインストール
#Gemfile
gem 'kaminari'
#ターミナル
bundle install --path vendor/bundle
続いてkaminari
の設定を生成。
#ターミナル
$ rails g kaminari:config
上記コマンドにより、config/initializers
ディレクトリ直下に、以下の設定ファイルが生成される。
#config/initializers/kaminari_config.rb
# frozen_string_literal: true
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
このファイル内でページネーションのデフォルト値を記載できます。(こちらに記載しコントローラに書かない事)
-
default_per_page
- 1ページあたりの表示件数(デフォルトは25レコード)
-
max_per_page
- 1ページあたりの最大表示件数(デフォルトはnil。つまり無限)
-
max_pages
- 最大ページ数(デフォルトはnil)
-
window
- 現在のページから、左右何ページ分のリンクを表示させるか(デフォルトは4件)
- 上の例では現在は9ページ目で、左右4ページずつ表示させている。
- 現在のページから、左右何ページ分のリンクを表示させるか(デフォルトは4件)
-
outer_window
- 最初(First)と最後(Last)のページから、左右何ページ分のリンクを表示させるか(デフォルトは0件)
-
left
- 最初(First)のページから、何ページ分のリンクを表示させるか(デフォルトは0件)
- 上の例では2ページ表示させている(1、2ページ目)。
- 最初(First)のページから、何ページ分のリンクを表示させるか(デフォルトは0件)
-
right
- 最終(Last)ページから、何ページ分のリンクを表示させるか(デフォルトは0件)
- 上の例では1ページ表示させている(17ページ目)。
- 最終(Last)ページから、何ページ分のリンクを表示させるか(デフォルトは0件)
-
page_method_name
- モデルに追加されるページ番号を指定するスコープの名前:page by default
-
param_name
- ページ番号を渡すために使用するパラメータ名(デフォルトは
:page
) Board.page(params[:page])
のようにparamsメソッドで取得できる。
- ページ番号を渡すために使用するパラメータ名(デフォルトは
-
params_on_first_page
- false by default
例えばデフォルト値を変えたいならばこのように
#config/initializers/kaminari_config.rb
config.default_per_page = 25 ←ここをコメントアウトし適宜数値を変更する
すればOKです!
コントローラーの設定
board_controller
だとして降順で表示されていきます。
#app/controllers/boards_controller.rb
class BoardsController < ApplicationController
def index
@boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page])
end
end
- perメソッド: 1ページあたりの表示件数は何件にするか
- pageメソッド:何ページ目を表示させるのか
この二つのメソッドでコントローラで設定ができます。(perメソッドは最初のconfig/initializers
にて設定を終えているのでここでは使っていません)
kaminari
は配列にも使用可能で
#config/initializers/kaminari_config.rb
def index
@board = Board.all.includes(:user).order(created_at: :desc)
@board = Kaminari.paginate_array(@board).page(params[:page]).per(20)
end
paginata_arrayメソッド
で配列に使用することができます。
viewの設定
#表示したいview
<%= paginate @board %>
最後に
読んでいただいた方、ありがとうございました。