【Rails】ページネーション(kaminari)

はじめに

ページネーションを実現させるgem(kaminari)の実装方法について書いていきます。

gemのインストール

まず、今回使用するgem kaminariをインストールしましょう。

Gemfile

gem 'kaminari'

gemのインストール

bundle install

基本的な使い方

コントローラー

 def index
   @boards = Board.includes(:user).order(created_at: :desc).page(params[:page])
 end

.page(params[:page)がpagenationのメソッドです。

pageメソッド

kaminariを導入すると、モデルクラスにpageメソッドが定義される。このメソッドは、ページネーションにおけるページ数を指定します。ビューのリクエストの際paramsの中にpageというキーが追加されて、その値がビューで指定したページ番号となる。よって、pageの引数はparams[:page]となります。

perメソッド

perメソッドもpageメソッドと同様、kaminariというgemをインストールすることで利用できるメソッド。1ページあたりに表示する件数を指定します。perメソッドに引数として渡した数字が、ページネーションが実装されたビューで1ページあたりに表示する件数になります。

ビュー

<!-- 掲示板一覧 -->
  <div class="row">
    <div class="col-12">
      <div class="row">
      <% if @bookmark_boards.present? %>
      <%= render @bookmark_boards %>
      <% else %>
        <p><%= t('.no_result') %></p>
      <% end %>
      </div>
      <%= paginate @bookmark_boards %> #ここに入れる
    </div>
  </div>
</div>

ビューの一覧表示のコードに1行加えるだけでpagenationが表示されます。下のようになります。これはbootstrap4を当てています。 Image from Gyazo

下記のgenerateを実行するだけで、bootstrap4が当たります。

$rails g kaminari:views bootstrap4

基本設定について

デフォルトの構成ファイルをconfig / initializersディレクトリに生成する便利なジェネレーターがあります。

$ rails g kaminari:config

config/initializers

# 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.max_pages = nil
  # config.params_on_first_page = false
end

ここの値の変更をするとkaminariのデフォルトの設定をすることができます。