kaminari gemについての雑なまとめ

FBCのプラクティスでkaminari gemを使ってRailsアプリにページネーションを実装しました。 kaminari gemは使ったことが無かったので今後の為にまとめてみました。

karminari とは?

ページング処理を実装できるgem。

amatsuda/kaminari: ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

インストール

Gemfileに追記するだけです。

gem 'kaminari'
$ bundle install

ページネーションの表示方法

  1. controllerでpage メソッドでレコードを取得。
  2. viewでpaginate メソッドを使いページネーションを表示。

例) 本の一覧ページで3件づつのページネーションを表示する。

# app/controllers/books_controller.rb

def index
  @books = Book.page(params[:page]).per(3).order(:id)
end
# app/views/books/index.html.erb

<%= paginate @books %>

kaminari徹底入門 - Qiita

並び順が一意になるようにSQLにORDER句を追加する

orderがないと並び順がある日突然変わったり、どのページを開いても特定のデータが表示されない、といった事故が発生します。

ページネーションを追加する場合はRailsで生成されるSQLにORDER句を追加してレコードを取得する必要があるようです。 Railsの場合はModel.order(:column_name) でORDER句を追加できます。

order | Railsドキュメント

1ページ当たりの表示件数の指定はcontroller、modelどちらでも可能

1ページ当たりの表示件数の指定controller、modelのどちらでも可能です。

例) app/controllers/books_controller.rbapp/models/book.rb で表示件数を指定する。

# controller

def index
  # per(3)で表示件数を3件に指定
  @books = Book.page(params[:page]).per(3).order(:id)
end
# model

class Book < ApplicationRecord
  # 表示件数を3件に指定
  paginates_per 3
end

amatsuda/kaminari: ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

amatsuda/kaminari: ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

ページネーションを多言語化する

i18n gemを使いRails.root/config/locales ディレクトリにあるロケールファイルの翻訳情報を上書きすることで多言語化できます。

例) ページネーションのFirstLastPrevNext を日本語化する。

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

amatsuda/kaminari: ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

まとめ

かなり雑なまとめですが概要は掴めたので良かったです。 全てを深堀りするのではなく、必要に応じて知識を深堀りするような学習習慣に変えていけるようになろうと思います。

参照

amatsuda/kaminari: ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

kaminari徹底入門 - Qiita

order | Railsドキュメント