🍎

【Rails】ページ閲覧数の表示方法

2023/08/18に公開

はじめに

  • ページの閲覧数をカウントし、表示する
  • 閲覧数は各投稿へアクセスしたユーザー数を集計
  • 「Userモデル」「Bookモデル」作成済
  • 完成イメージ ↓
    altテキスト

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>

ここまでで閲覧数が表示されるようになりました!

altテキスト

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

https://qiita.com/nao0725/items/233b7eeba46fe43a6af3

https://qiita.com/Auk10/items/6c789a569bfe71214745

Discussion