🍎
【Rails】ページ閲覧数の表示方法
はじめに
- ページの閲覧数をカウントし、表示する
- 閲覧数は各投稿へアクセスしたユーザー数を集計
- 「Userモデル」「Bookモデル」作成済
- 完成イメージ ↓
1.モデル作成
閲覧数用に「ReadCountモデル」を作成する
外部キーとして「user_id」「book_id」を持たせる
ターミナル
$ rails g model ReadCount user_id:integer book_id:integer
ターミナル
$ rails db:migrate
2.アソシエーションを設定
- 1人のユーザーは複数の閲覧データを持つため、user : read_count = 1 : N
- 1つの本は複数の閲覧データを持つため、book : read_count = 1 : N
app/models/user.rb
has_many :read_counts, dependent: :destroy
app/models/book.rb
has_many :read_counts, dependent: :destroy
app/models/read_count.rb
class ReadCount < ApplicationRecord
belongs_to :user
belongs_to :book
end
3.booksコントローラー編集
Bookの閲覧数のため、booksコントローラーに記述する
app/controllers/books_controller.rb
class BooksController < ApplicationController
:
def show
@book_detail = Book.find(params[:id])
unless ReadCount.find_by(user_id: current_user.id, book_id: @book_detail.id)
current_user.read_counts.create(book_id: @book_detail.id)
end
:
end
- 「@book_detail = Book.find(params[:id])」で本のidを取得し@book_detailに代入
- 「unless ReadCount.find_by(user_id: current_user.id, book_id: @book_detail.id)」
ではReadCountの中に、取得したuser_idとbook_idが一致するものがないか探す- falseの場合、閲覧数がcreateされる
4.ビュー作成
閲覧数を表示させたいページに追記する
app/views/books/index.html.erb
<td>閲覧数:<%= book.read_counts.count %></td>
ここまでで閲覧数が表示されるようになりました!

下記サイトを参考にさせていただきました🙏
Discussion