ページネーション機能(kaminariの導入)

内容

コメント機能の前に、一覧ページでページネーション機能を実装する

ページネーション機能

1. kaminariの導入

railsでページネーションを実装するにはkaminariというgemが便利
gemfile

gem 'kaminari'

ターミナル

% bundle install
% rails s

2. ビューでページネーションを表示

コントローラーを以下のように編集
posts_controller.rb

def index
  # ページネーションをつけたいデータに.page(params[:page])を追加
  @posts = @q.result(distinct: true).includes(:user).page(params[:page])
end

続いてビューを以下のように編集
index.html.erb

# ページネーションを表示させたいところに<%= paginate @posts %>を追加
<%= paginate @posts %>

これで実装完了!簡単!
ページネーションが1ページに表示するレコード数はデフォルトで25件
よってレコード数が26件以上あれば、ページネーションが表示される

3. ページに表示するレコード数を変更したい時

1ページに表示するレコード数はデフォルトで25件のため、このレコード数を変更したい場合は以下のように記述
posts_controller.rb

  # # .page(params[:page])の後に.per(10)を追加→数値によってレコード数を変更できる
  @posts = @q.result(distinct: true).includes(:user).page(params[:page]).per(10)

4. ページネーションのCSSを編集

ここではまずbootstrapを導入してからCSSを編集する
gemfile

gem 'bootstrap', '~> 5.1.0'
# bootstrapはjQueryに依存するため以下も追加(既に導入してるので今回は飛ばす)
gem 'jquery-rails'

sprockets-railsがv2.3.2.以上であるか確認してからインストール

% bundle show |fgrep sprockets-rails
  * sprockets-rails (3.2.2)
% bundle install
% rails s

その後、application.scssやapplication.jsを編集し、rails g kaminari:views bootstrap4(bootstrap5はなぜかなかった)を実行することでビューは編集できたのだが、ページネーション以外のビューが崩れてしまったため断念
bootstrapによるビューの修正は後回しとする

次回

投稿詳細ページでコメントのやり取りができるコメント機能の実装

参考

スクロール機能

サイドバーとメインコンテンツをdisplay: flex;で分けていて、別々にスクロールしたい場合、以下のように記述する

# 親要素にheightを指定
.contents {
  display: flex;
  height: 100vh;
}

# 子要素それぞれにoverflow-yを指定
.side-bar {
  overflow-y: auto;
}
.main {
  overflow-y: auto;
}

これで別々にスクロールが可能となる