掲示板のページネーション

kaminariのインストール

今回はページネーションをkaminari gemを使って実装する Gemfileに gem 'kaminari' を追記してbundle install —path vendor/bundle
今回の場合掲示板一覧画面とブックマーク一覧に1ページあたり20件の掲示板を表示するようにする

bundle exec rails g kaminari:config

を実行すると config/initializers/kaminari_config.rbとページネーションのデフォルトの設定ファイルを生成する
boardモデルに1ページあたり20件の掲示板を取得するようにboard.rbに paginates_per 20を記載 または、先ほど生成されたconfig/initializers/kamakiri_config.rbに

Kaminari.configure do |config|
  config.default_per_page = 20
end

と記載、設定の記載なので後者の書き方の方が良い?

コントローラの修正

boardsコントローラに

def index
  @boards = Board.all.includes(%i[user bookmarks]).order(created_at: :desc).page(params[:page])
end
def bookmarks
    @boards = current_user.bookmark_boards.includes(:user).order(created_at: :desc).page(params[:page])
end

と.page params[:page]を記載 ページネーションのビューはbootstrap4のレイアウトを適用するために

bundle exec rails g kaminari:views bootstrap4

を実行することでapp/views/kaminari/以下にページネーションの指定したレイアウトを適用したビューファイルを生成してくれる

ページネーションの表示

あとは掲示板一覧のビューとブックマーク一覧に

#boards/index.html.erb
<div class="row">
    <div class="col-12">
      <div class="row">
      <% if @boards.blank? %>
        <p><%= t('.no_board') %></p>
      <% else %>
        <%= render @boards %>
      <% end %>
      </div>
    </div>
  </div>
  <%= paginate @boards %>
</div>

#bookmarks.html.erb
<div class="row">
    <div class="col-12">
      <div class="row">
      <% if @boards.blank? %>
        <p><%= t('.no_bookmark_board') %></p>
      <% else %>
        <%= render @boards %>
      <% end %>
      </div>
    </div>
  </div>
  <%= paginate @boards %>
</div>

と<%= paginate @boards %>を記載してサーバーを起動してページネーション機能が実装されているか確認する
rails cで@boards.page(1).limit_valueで1ページあたりの取得件数が20になっているか確認

参考文献

GitHub - kaminari/kaminari: ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps

【Rails】kaminariの使い方をマスターしよう! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

bootstrap4が適用されたkaminariのviewを作成したい - その辺にいるWebエンジニアの備忘録