Railsでページングを実装する場合はkaminariというgemが最も有名です。
kaminariのインストール
Gemfileに下記の記述を追記します。
1 |
gem 'kaminari' |
bundleします。
1 |
bundle |
ページングの実装
コントローラー側
pageスコープ
ページ番号は「params[:page]」で画面から渡されてきます。
1 |
検索結果の変数.page(params[:params]) |
kaminariが提供しているpageというスコープを使うと簡単に画面から送られてきたデータ範囲のデータを抽出することが可能です。
perスコープ
1 |
検索結果変数.per(表示件数) |
引数で指定した表示件数分の検索結果だけが返されます。
ビュー側
paginateビューヘルパー
「現在どのページを表示しているかの情報」と「他のページに移動するためのリンク」機能を提供してくれます。
erbを使用している場合は下記のように記述します。
1 |
<%= paginate 一覧表示対象のオブジェクトのリスト(例:@users) %> |
page_entries_infoビューヘルパー
「全データが何件なのか」という情報を持っています。
日本語化
kaminariはデフォルトで英語になっているので日本語化しましょう。
config/application.rb
前提として下記の記述を追加されている必要があります。
1 2 3 4 5 6 7 8 |
module App class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. config.i18n.default_locale = :ja ★追加 end end |
config/locales/ja.ymlというファイルを作成してkaminari専用の翻訳ファイルを作成しましょう。内容は下記のような内容にしましょう。
1 2 3 4 5 6 7 8 |
ja: views: pagination: first: '最初' last: '最後' previous: '前' next: '次' truncate: '...' |
ページ全体の表示件数の設定
モデル別のデフォルトの1ページあたりの表示件数を設定したい場合は下記のように記述します。
モデル別の設定(app/models/モデル名.rb)
1 |
paginates_per 1ページあたりの表示件数 |
全体設定
また、全体の1ページあたりの表示件数を変えたい場合は下記コマンドを実行します。
1 |
rails g kaminari:config |
「config/initializers/kaminari_config.rb」にファイルが生成されているのでそこに下記設定を追記します。
1 |
config.default_per_page = 1ページあたりの表示件数 |
デザインの調整
kaminariはデフォルトでは味気ないデザインになっています。paginateビューヘルパーはいくつかの「パーシャルテンプレート」というテンプレートを持っているので選択しましょう。
例えば、「bootstrap」のパーシャルテンプレートを使用する場合は下記のコマンドを実行します。
1 |
rails g kaminari:views bootstrap4 |
下記のようにかっこいいデザインになります。
この記事へのコメントはありません。