
こんにちは、未経験からITエンジニアへの転職を目指しているごんにんごんです。
今日は”ページネーション”について書きたいと思います。
Contents
はじめに
ページネーションに行き着いたのは訳がありまして。現在制作しているオリジナルアプリでは、トップページにユーザーの投稿を一覧表示させています。
「ちゃんと投稿できたか?」とか「データベースに保存されたか?」とか、テストを続けていたら、サンプルの投稿でトップページが埋まってしまったのです。
これは見づらいな、、、と考えたとき、“ページネーション”を知ったというわけです。
ページネーション(Pagination)とは
googleがわかりやすい例で、検索ページの一番下に表示されているやつです。

kaminari gemについて
Railsには“Kaminari”というページネーションを簡単に実装してくれるgemが提供されています。
Kaminariを用いてページネーションを実装
gemの導入から、bootstrapを用いたページネーションの見た目の装飾まで説明します。
ちなみに環境は以下のとおり。
導入環境
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin21]
Rails 6.0.4.7
kaminari (1.2.2)
bootstrap5-kaminari-views (0.0.1)
STEP1. Gemの追加とbundle install
# Gemfile
gem 'kaminari'
# Terminal
bundle install
STEP2. kaminariの設定
gemが入ったところで、ページネーションの設定ファイルを生成しましょう。
#Terminal
rails g Kaminari:config
生成されたconfig/initializers/kaminari_config.rbを開きます。
このファイルでページネーションをどんなレイアウトにするか決めることができます。今回は1ページあたりに表示するレコード数を10としたいので、一番上の項目のコメントアウトを外して、以下記述しておきます。
Kaminari.configure do |config|
config.default_per_page = 10
end
STEP3.ページネーションを表示させる
Controllerで、ページネーションを表示させたいデータに以下追加します。
なお、今回は冷蔵庫の投稿データ(@boxes)にページネーションをつけています。
# app/controllers/boxes.rb
def index
# paginationのために、page(params[:page])を追加
@boxes = Box.includes(:user).order("created_at DESC").page(params[:page])
end
コントローラーに追加した“.page(params[:page])”について補足します。
kaminari gemの導入により、boxesコントローラーのindexアクションの際に、pageというパラメータもくっ付いてくるようになりました。
つまり、どのページがクリックされたかという情報がparamsに乗せてコントローラーに送られるので、params[:page]で取得しているということです。
次に、ページネーションを表示させるviewに、paginationヘルパーを記述します。このヘルパーによって、画面にpaginationリンクが表示されます。
<%= paginate @boxes %>
どのように表示されるでしょうか?

・・・なんだか味気ないですね。そんな時はbootstrapで装飾してあげましょう。
BootstrapSTEP4. ページネーションを彩る #bootstrap
まずはじめにアプリ全体にbootstrapを適用させるために、app/views/layouts/application.html.erbの<head>タグ内に以下コードを追加しましょう。
<head>
~省略~
<%# bootstrapをアプリケーション全体に適応させる %>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
次にページネーションにbootstrapを適用させるため、以下gemをインストールします。
# Gemfile
gem 'bootstrap5-kaminari-views', '~> 0.0.1'
# Terminal
bundle install
STEP4の最後でviewファイルに記述したpatinationヘルパーを以下のように書き換えます。
<%= paginate @boxes, theme: 'bootstrap-5' %>
theme: ‘bootstrap-5’を加えることで、ページネーションにbootstrapのcssが適応されます。

終わりに
ページネーションを導入するだけで、ページがすっきりしました。
bootstrapのthemeにもさまざま種類があるみたいなので、アプリケーションの色合いに合わせて変えてみることもできますよ!
ぜひやってみてください〜