Ryota400’s blog

エンジニアを目指して書いてます。

掲示板のページネーション

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 %>

参考文献

qiita.com

github.com

qiita.com