CodeZine(コードジン)

特集ページ一覧

Railsで「Kaminari」を使ってページネーションを実装しよう

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/09/14 14:00
目次

より大量のデータでページングの動作を確認する

 さらにKaminariの動作を確認するためにより大量のデータを投入して、paginateヘルパーメソッドの動作を確認します。

 以下の通り、フィクスチャの件数を1000件に修正します。

[リスト 6]test/fixtures/articles.yml
<% 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」にアクセスすると以下の通り表示されます。

1000件投入した場合の1ページ目のページ送り
1000件投入した場合の1ページ目のページ送り

 2~5ページ目のページ番号へのリンク、次のページを表す[Next]リンクと最後のページを表す[Last]リンクが表示されます。リンクがそれぞれ以下のように出力されていることを確認しておきましょう。

表:リンク文字列とURL
リンク文字列 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メソッド」を使用して変更することができます。

[リスト 7]app/controllers/articles_controller.rb
  def index
    @articles = Article.page(params[:page]).per 10
  end

 上記の修正を反映した状態で「http://localhost:3000/articles」にアクセスすると、以下の通り、1ページあたりの表示件数が25件から10件に変更されていることがわかります。

1ページあたりの表示件数を10件に変更した場合
1ページあたりの表示件数を10件に変更した場合

 この方法以外にも、Kaminariの設定をRailsアプリケーション全体で変更することができます。以下のコマンドを実行するとKaminari用の設定ファイルが作成されます。

bin/rails g kaminari:config

 作成された設定ファイルを確認すると以下のようにデフォルト設定がコメントアウトされた状態で記述されています。

[リスト 8]config/initializers/kaminari_config.rb
# 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

 それぞれの設定項目の意味は以下の通りです。

表:Kaminariの設定ファイル項目
項目 意味 
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を指定します。

[リスト 9]config/initializers/kaminari_config.rb
…(中略)…
	config.default_per_page = 20
…(中略)…

 個別にperメソッドを使用すると設定ファイルより優先されてしまうので、先ほど修正したコントローラーのソースコードを元に戻します。

[リスト 10]app/controllers/articles_controller.rb
…(中略)…
	def index
    @articles = Article.page(params[:page])
  end
…(中略)…

 イニシャライザ(config/initializers)の修正を反映するにはpumaサーバーを再起動する必要があります。再起動して「http://localhost:3000/articles」にアクセスすると1ページあたりの表示件数が20件になっていることが確認できます。

1ページあたりの表示件数を20件に変更した場合
1ページあたりの表示件数を20件に変更した場合

まとめ

 ここまで、Kaminariの概要を確認し、実際にデフォルトの動作を中心に確認しました。今回ご紹介したpaginateヘルパーメソッド以外にも、Kaminariは便利なヘルパーメソッドを提供していますので、詳細はREADMEを参照してみてください。次回は、テンプレートエンジンの「Slim」を紹介する予定です。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール

もっと読む

著者プロフィール

  • WINGSプロジェクト 竹馬 力(チクバ ツトム)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5