ページネーションの実装(kaminari)
kaminari を使ってみたのでメモ。
will_paginate よりもこっちのほうがとっつきやすい?ような気がした。
gem をインストール(bundle install)
gem はこちら
https://github.com/kaminari/kaminari
controller でページ番号に対応する範囲のデータを取得
# app/controller/tasks_controller.rb def index @tasks = current_user.tasks.page(params[:page]) ... end
gemをインストールすると、表示するページ番号がparams[:page]でアクションに渡される。
page というスコープを使うだけで params[:page] に表示されるべきデータ範囲を検索できる。
view にページネーションのための情報を表示
# app/views/tasks/index.html.erb <div class="mb-3"> <%= paginate @task %> <%= page_entries_info @task %> </div>
以下の2つのヘルパーメソッドを使用する。
ヘルパーメソッドの定義はここ
kaminari/helper_methods.rb at master · kaminari/kaminari · GitHub
paginate
現在、どのどのページを表示しているかを取得・表示する。
また、他のページに移動するためのリンクを生成し、表示する。
page_entries_info
全データが何件あり、現在どのデータが表示されているかの情報を表示
(必要あれば)locales の設定
kaminari は内部に英語の翻訳しか持っていないので、ja の翻訳ファイルを追加する。
ja: views: pagination: first: "« 最初" last: "最後 »" previous: "‹ 前" next: "次 ›" truncate: "..." helpers: page_entries_info: one_page: display_entries: zero: "" one: "<strong>1-1</strong>/1件中" other: "<strong>1-%{count}</strong>/%{count}件中" more_pages: display_entries: "<strong>%{first}-%{last}</strong>/%{total}件中"
デザインの適用
$ bin/rails g kaminari:views bootstrap4
上記は bootstrap4 のデザインテンプレートを使用する例。
このコマンドで、app/view/kaminari 配下にビューテンプレートファイルが追加される。
他のテンプレートを使用するときはこちらを参照
GitHub - amatsuda/kaminari_themes
(必要あれば)表示件数の変更
3通りある。
1. perスコープで指定する。
# app/views/tasks/index.html.erb def index @tasks = current_user.tasks.page(params[:page]).per(50) ... end
2. modelに設定する
# app/models/task.rb class Task < ApplicationRecord paginates_per 50 ...
3. kaminari 用の config ファイルを作って設定する
$ bin/rails g kaminari:config
# config/initializers/kaminari_config.rb # frozen_string_literal: true Kaminari.configure do |config| config.default_per_page = 50 # config.max_per_page = nil # config.window = 4 # config.outer_window = 0 # config.left = 0 # config.right = 0 # config.page_method_name = :page # config.param_name = :page # config.max_pages = nil # config.params_on_first_page = false end ...
参考記事
https://github.com/kaminari/kaminari
https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227