##ページネーションとは?
ページネーションとは画像の通り、検索した時などの下に出てくる、今は何ページ目…と表記してくれるもの。
railsでこのページネーションを導入する際にはkaminari
と言うgemを使っていく。
手順
①kaminari
のインストール
②ページネーションデザインのデフォルトの設定ファイルを作成/編集
③コントローラーの編集
④viewの実装
##①kaminari
のインストール
今回はboostrap4を一緒に使っていくので、Gemfile
にkaminari
とbootstrap4-kaminari-views
を記入し、bundle install
する。
gem 'kaminari'
gem 'bootstrap4-kaminari-views'
→ bundle install
##②ページネーションデザインのデフォルトの設定ファイルを作成/編集
ターミナルにて、設定ファイルの作成コマンドを実施。
rails g kaminari:config
config/initializers/kaminari_config.rb
を開くと、下記がデフォルトで入っている。
基本的にコメントアウトされているので設定したいもののコメントアウトを外していく。それぞれの意味は下記に記載していく。
# frozen_string_literal: true
Kaminari.configure do |config|
# config.default_per_page = 25
1ページあたりの表示件数(デフォルトは25レコード)
# config.max_per_page = nil
1ページあたりの最大表示件数(デフォルトはnil。つまり無限)
# config.window = 4
現在のページから、左右何ページ分のリンクを表示させるか(デフォルトは4件)
# config.outer_window = 0
最初(First)と最後(Last)のページから、左右何ページ分のリンクを表示させるか(デフォルトは0件)
# config.left = 0
最初(First)のページから、何ページ分のリンクを表示させるか(デフォルトは0件)
# config.right = 0
最終(Last)ページから、何ページ分のリンクを表示させるか(デフォルトは0件)
# config.page_method_name = :page
モデルに追加されるページ番号を指定するスコープの名前:page by default
# config.param_name = :page
ページ番号を渡すために使用するパラメータ名(デフォルトは:page)
↑Board.page(params[:page])のようにparamsメソッドで取得できる。
# config.max_pages = nil
最大ページ数(デフォルトはnil)
# config.params_on_first_page = false
最初のページでparamsを無視しない
end
##③コントローラーの編集
ページネーションを表示させたいところに.page(params[:page])
を追加。
例えばBoardにページネーションをつけたい場合、以下のように記載。
def index
@boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page])
end
ここの表記に.per(20)
を付け足たら以下のようになる↓
@boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page]).per(20)
ただし、1ページにこの場合だと最大20件と設定できるが、毎回ページネーションを新たに追加するごとに同じように記入しなければならないので、出来ればコントローラーに記載した方が、DRYな記法になる。
##④viewの実装
あとはページネーションさせたいviewに下記を追記するだけで出来る。
<%= paginate @boards %>
##ページネーションのデザイン変更
先程のだけだと少しシンプルすぎるので、先程のviewに以下を書き足す。
<%= paginate @boards, theme: 'twitter-bootstrap-4' %>
またこれとは別に、cssを編集してさらに自分好みのデザインに変更することも可能。
##ラベルを日本語に変更
ラベルとは、ページ番号の前後についているFirst
やPrve
のこと。
デフォルトでは英語表記なので、こちらを日本語に変更したい場合はrailsアプリのデフォルト言語を日本語に変更したあと、ja.yml
にてそれぞれ編集する必要がある。
▶︎デフォルトの言語を日本語に設定
config/locales
に日本語変換用のja.yml
を作成。下記のは一例。
ja:
views:
pagination:
first: "« 最初"
last: "最後 »"
previous: "‹ 前"
next: "次 ›"
truncate: "..."
##ラベルのアイコン化
ラベルをアイコンのみにすることで、よりシンプルなページネーションを作ることができる。
Font Awesome使った例を記載。
はじめに、Font Awesomeを読み込むために,
app/views/layouts/application.html.erb
に以下のコードを追加して、アプリ全体にFont Awesomeを適用。
#コード追加 Font Awesome読み込みコード
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">
あとは先程出てきたja.ymlファイル
に使用したいアイコンのコードに書き換えるのみでOK。
<< < 1 2 3 .....9 10 > >>
のようになる。
ja:
views:
pagination:
first: <i class="fas fa-angle-double-left"></i>
last: <i class="fas fa-angle-double-right"></i>
previous: <i class="fas fa-angle-left"></i>
next: <i class="fas fa-angle-right"></i>
truncate: "..."
##参考記事
【Rails】kaminariの使い方をざっくりまとめてみた
【Rails初心者】ページネーションを実装して自分好みにデザインを変える
Kaminariの使い方 まとめ