掲示板のページネーション
kaminariのインストール
Gemfile
gem 'kaminari'
bundle install
以下のコマンドを実行すると config/initializers/kaminari_config.rbとページネーションのデフォルトの設定ファイルを生成する。
$ rails g kaminari:config
boardモデルに1ページあたり20件の掲示板を取得するようにboard.rbに paginates_per 20を記載 または、先ほど生成されたconfig/initializers/kamakiri_config.rbに
Kaminari.configure do |config| config.default_per_page = 20 end
kaminariの設定ファイルの説明
# 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ページずつ表示させている。
outer_window
最初(First)と最後(Last)のページから、左右何ページ分のリンクを表示させるか(デフォルトは0件)
left
最初(First)のページから、何ページ分のリンクを表示させるか(デフォルトは0件) 上の例では2ページ表示させている(1、2ページ目)。
right
最終(Last)ページから、何ページ分のリンクを表示させるか(デフォルトは0件) 上の例では1ページ表示させている(17ページ目)。
page_method_name
モデルに追加されるページ番号を指定するスコープの名前:page by default
param_name
ページ番号を渡すために使用するパラメータ名(デフォルトは:page) Board.page(params[:page])のようにparamsメソッドで取得できる。
params_on_first_page
false by default
コントローラの修正
app/controllers/boards_controller.rb
class BoardsController < ApplicationController def index @boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page]) end def bookmarks @bookmark_boards = current_user.bookmark_boards.includes(:user).order(created_at: :desc).page(params[:page]) end end
board_controllerで、掲示板の一覧とブックマークの一覧を取得処理でpageを使用する。
page params[:page]を記載 ページネーションのビューはbootstrap4のレイアウトを適用するために 以下のコマンドを実行
bundle exec rails g kaminari:views bootstrap4
app/views/kaminari/以下にページネーションの指定したレイアウトを適用したビューファイルを生成してくれる。
ページネーションの表示
掲示板一覧とブックマーク一覧にpaginateを追加
app/views/boards/bookmarks.html.erb
<%= paginate @bookmark_boards %>
app/views/boards/index.html.erb
<%= paginate @boards %>
参考文献