前提条件
・バージョン Rails 6.1.7
・device導入 ・Bootstrap導入
・ユーザー機能実装済(Userモデル)
・投稿機能実装済(Bookモデル)
・ページの閲覧数をカウントし、投稿一覧、投稿詳細に表示させる
(閲覧数は各投稿(show)へアクセスした数を集計する。)
モデル作成
bookとuserと1対Nの関係になる「閲覧数」モデルを作成します。
referencesで作成
references を使用すると、関連付けに必要なカラムを自動的に追加することができます。
rails g model LookCount user:references book:references
$ rails db:migrate
アソシエーション追加
has_many :look_counts, dependent: :destroy
user
has_many :look_counts, dependent: :destroy
references を使用して関連付けを行ったので自動で作成されている
(以下のようになっていればOK!)
class LookCount < ApplicationRecord
belongs_to :user
belongs_to :book
end
コントローラー
def show
@book = Book.find(params[:id])
@user = @book.user
@book_new = Book.new
@book_comment = BookComment.new
# 以下閲覧数の表示(以下を追加)
unless LookCount.find_by(user_id: current_user.id, book_id: @book.id)
current_user.look_counts.create(book_id: @book.id)
end
end
@book = Book.find(params[:id]) :特定の本をデータベースから一つ取得します。
LookCount.find_by(user_id: current_user.id, book_id: @book.id)
(current_user)と表示されている本(@book)に関連する閲覧数オブジェクトを検索します。
もし、現在のユーザーがこの本を閲覧した回数を記録していなければ、以下の処理を実行します。
current_user.look_counts.create(book_id: @book.id)
現在のユーザーと表示している本に関連する閲覧数オブジェクトを作成し、それをデータベースに保存します。
これにより、閲覧数が記録されます。
views
閲覧数を表示したいところに以下を追加する。
<td>閲覧数:<%= @book.look_counts.count %></td>
この本(@book) がいくつの閲覧数(look_counts)を持っているかを数えます
完成イメージ
ひとこと
ご覧いただきありがとうございました!
プログラミングを始めて1ヶ月程度の初心者です。
間違っている部分がありましたら教えて頂けると幸いです。
ではでは〜
以下を参考にさせて頂きました!