gem kaminariを使用しページネーションを実装

ページネーション

ページネーションとは検索結果や内容の多いページを分割して表示させ、見やすくすること
使用例↓

実装内容

掲示板一覧画面とブックマーク一覧画面にページネーションを実装。
ページネーションにはkaminariを使用し、1ページあたり20件の掲示板を表示させる。
bootstrap4で形成。

導入

gem 'kaminari'のインストール

  gem 'kaminari'

bundle install

ページネーション設定ファイルの作成

$ rails g kaminari:config
Running via Spring preloader in process 2147
      create  config/initializers/kaminari_config.rb

生成されたファイルを編集。

  # frozen_string_literal: true

Kaminari.configure do |config|
  config.default_per_page = 20
  # 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

コメントアウトを外して使用する。
今回は1ページに20件の掲示板を表示させたいので20と指定する。
反映にはサーバーの再起動が必要。

bootstrapを適応

% rails g kaminari:views bootstrap4

このコマンドを実行するだけでページネーションに自動でbootstrapが適応される。

controller

pageメソッドが使用可能になっているので掲示板一覧とブックマーク一覧画面のアクションへ追記。

~
  def index
    if logged_in?
      @boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page])
    else
      redirect_to login_path, danger: 'ログインしてください'
    end
  end

    def bookmarks
    @bookmark_boards = current_user.bookmark_boards.includes(:user).order(created_at: :desc).page(params[:page])
  end
~

view

掲示板一覧、ブックマーク一覧のviewへpagenateヘルパーのを記述。
paginateでコントローラの@boards@bookmark_boardsを呼び出す。

~
  <%= paginate @boards %>
~
~
<%= paginate @bookmark_boards %>
~