掲示板のページネーション
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になっているか確認
参考文献
【Rails】kaminariの使い方をマスターしよう! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト