より大量のデータでページングの動作を確認する
さらにKaminariの動作を確認するためにより大量のデータを投入して、paginateヘルパーメソッドの動作を確認します。
以下の通り、フィクスチャの件数を1000件に修正します。
<% 1000.times do |n| %>
article<%= n %>:
title: <%= "title#{n}" %>
body: <%= "body#{n}" %>
<% end %>
以下のコマンドを再度実行してデータを更新します。
bin/rails db:fixtures:load
先ほど同様、件数が1000件となっていることを確認しておきましょう。
bin/rails c
▼
Loading development environment (Rails 5.2.0) irb(main):001:0> Article.count (9.8ms) SELECT COUNT(*) FROM "articles" => 1000
再度一覧ページ「http://localhost:3000/articles」にアクセスすると以下の通り表示されます。
2~5ページ目のページ番号へのリンク、次のページを表す[Next]リンクと最後のページを表す[Last]リンクが表示されます。リンクがそれぞれ以下のように出力されていることを確認しておきましょう。
| リンク文字列 | URL |
|---|---|
| 2 | http://localhost:3000/articles?page=2 |
| 3 | http://localhost:3000/articles?page=3 |
| 4 | http://localhost:3000/articles?page=4 |
| 5 | http://localhost:3000/articles?page=5 |
| Next | http://localhost:3000/articles?page=2 |
| Last | http://localhost:3000/articles?page=40 |
Kaminariのデフォルトでは、基本的に前後4ページ(特殊な場合は5ページ)分の番号へのリンクを表示します。6ページと7ページにアクセスした際のページ送りの違いも確認してみてください。
Kaminari用の設定ファイル
ここまでの動作確認では、1ページあたりの表示件数は25件であるなど、Kaminariのデフォルト設定のままでした。これを変更するには、Kaminariが提供する「perメソッド」を使用して変更することができます。
def index
@articles = Article.page(params[:page]).per 10
end
上記の修正を反映した状態で「http://localhost:3000/articles」にアクセスすると、以下の通り、1ページあたりの表示件数が25件から10件に変更されていることがわかります。
この方法以外にも、Kaminariの設定をRailsアプリケーション全体で変更することができます。以下のコマンドを実行するとKaminari用の設定ファイルが作成されます。
bin/rails g kaminari:config
作成された設定ファイルを確認すると以下のようにデフォルト設定がコメントアウトされた状態で記述されています。
# frozen_string_literal: true Kaminari.configure do |config| # config.default_per_page = 25 # 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.params_on_first_page = false end
それぞれの設定項目の意味は以下の通りです。
| 項目 | 意味 |
|---|---|
| default_per_page | 1ページあたりの表示件数 |
| max_per_page | ページあたりの表示件数の最大値 |
| window | 表示中のページに隣り合うページを何ページ表示するか |
| outer_window | 先頭ページ/最終ページから何ページ表示するか |
| left | 先頭ページから何ページ表示するか |
| right | 最終ページから何ページ表示するか |
| page_method_name | モデルにページ番号を追加する場合のscope名 |
| param_name | ページ番号を渡すためのGETパラメーター名 |
| params_on_first_page | 先頭ページへのリンク生成時にparamsを無視するか(falseでは無視) |
試しに、1ページあたりの表示件数を表すdefault_per_pageをデフォルトの25件から20件に修正してみましょう。以下のようにコメントアウトを外して20を指定します。
…(中略)… config.default_per_page = 20 …(中略)…
個別にperメソッドを使用すると設定ファイルより優先されてしまうので、先ほど修正したコントローラーのソースコードを元に戻します。
…(中略)…
def index
@articles = Article.page(params[:page])
end
…(中略)…
イニシャライザ(config/initializers)の修正を反映するにはpumaサーバーを再起動する必要があります。再起動して「http://localhost:3000/articles」にアクセスすると1ページあたりの表示件数が20件になっていることが確認できます。
まとめ
ここまで、Kaminariの概要を確認し、実際にデフォルトの動作を中心に確認しました。今回ご紹介したpaginateヘルパーメソッド以外にも、Kaminariは便利なヘルパーメソッドを提供していますので、詳細はREADMEを参照してみてください。次回は、テンプレートエンジンの「Slim」を紹介する予定です。
