FBCのプラクティスでkaminari gemを使ってRailsアプリにページネーションを実装しました。 kaminari gemは使ったことが無かったので今後の為にまとめてみました。
karminari とは?
ページング処理を実装できるgem。
インストール
Gemfileに追記するだけです。
gem 'kaminari'
$ bundle install
ページネーションの表示方法
- controllerで
page
メソッドでレコードを取得。 - 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 %>
並び順が一意になるようにSQLにORDER句を追加する
orderがないと並び順がある日突然変わったり、どのページを開いても特定のデータが表示されない、といった事故が発生します。
ページネーションを追加する場合はRailsで生成されるSQLにORDER句を追加してレコードを取得する必要があるようです。
Railsの場合はModel.order(:column_name)
でORDER句を追加できます。
1ページ当たりの表示件数の指定はcontroller、modelどちらでも可能
1ページ当たりの表示件数の指定controller、modelのどちらでも可能です。
例) app/controllers/books_controller.rb
とapp/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
ページネーションを多言語化する
i18n gemを使いRails.root/config/locales
ディレクトリにあるロケールファイルの翻訳情報を上書きすることで多言語化できます。
例) ページネーションのFirst
、Last
、Prev
、Next
を日本語化する。
# config/locales/ja.yml ja: views: pagination: first: "« 最初" last: "最後 »" previous: "‹ 前" next: "次 ›" truncate: "…"
まとめ
かなり雑なまとめですが概要は掴めたので良かったです。 全てを深堀りするのではなく、必要に応じて知識を深堀りするような学習習慣に変えていけるようになろうと思います。