9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】kaminariとboostrap4を使ってページネーションをする

Posted at

##ページネーションとは?
ページネーションとは画像の通り、検索した時などの下に出てくる、今は何ページ目…と表記してくれるもの。
Image from Gyazo

railsでこのページネーションを導入する際にはkaminariと言うgemを使っていく。

手順
kaminariのインストール
②ページネーションデザインのデフォルトの設定ファイルを作成/編集
③コントローラーの編集
④viewの実装

##①kaminariのインストール
今回はboostrap4を一緒に使っていくので、Gemfilekaminaribootstrap4-kaminari-viewsを記入し、bundle installする。

Gemfile.
gem 'kaminari'
gem 'bootstrap4-kaminari-views'

→ bundle install

##②ページネーションデザインのデフォルトの設定ファイルを作成/編集
ターミナルにて、設定ファイルの作成コマンドを実施。

ターミナル.
rails g kaminari:config

config/initializers/kaminari_config.rbを開くと、下記がデフォルトで入っている。
基本的にコメントアウトされているので設定したいもののコメントアウトを外していく。それぞれの意味は下記に記載していく。

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にページネーションをつけたい場合、以下のように記載。

boards_controller.rb
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に下記を追記するだけで出来る。

index.html.rb
<%= paginate @boards %>

Image from Gyazo

##ページネーションのデザイン変更
先程のだけだと少しシンプルすぎるので、先程のviewに以下を書き足す。

index.html.rb
<%= paginate @boards, theme: 'twitter-bootstrap-4' %>

結果きれいに装飾され見やすくかつボタンが押しやすくなった。
Image from Gyazo

またこれとは別に、cssを編集してさらに自分好みのデザインに変更することも可能。

##ラベルを日本語に変更
ラベルとは、ページ番号の前後についているFirstPrveのこと。
デフォルトでは英語表記なので、こちらを日本語に変更したい場合はrailsアプリのデフォルト言語を日本語に変更したあと、ja.ymlにてそれぞれ編集する必要がある。
▶︎デフォルトの言語を日本語に設定

config/localesに日本語変換用のja.ymlを作成。下記のは一例。

config/locales/ja.yml
ja:
  views:
    pagination:
      first: "&laquo; 最初"
      last: "最後 &raquo;"
      previous: "&lsaquo; 前"
      next: " &rsaquo;"
      truncate: "..."

##ラベルのアイコン化
ラベルをアイコンのみにすることで、よりシンプルなページネーションを作ることができる。
Font Awesome使った例を記載。

はじめに、Font Awesomeを読み込むために,
app/views/layouts/application.html.erbに以下のコードを追加して、アプリ全体にFont Awesomeを適用。

app/views/layouts/application.html.rb
#コード追加 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 > >>のようになる。

config/locales/ja.yml
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の使い方 まとめ

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?