LoginSignup
0
0

閲覧数の表示

Posted at

:shamrock: 前提条件

・バージョン Rails 6.1.7
・device導入 ・Bootstrap導入
・ユーザー機能実装済(Userモデル)
・投稿機能実装済(Bookモデル)

・ページの閲覧数をカウントし、投稿一覧、投稿詳細に表示させる
(閲覧数は各投稿(show)へアクセスした数を集計する。)


:shamrock: モデル作成 

bookとuserと1対Nの関係になる「閲覧数」モデルを作成します。

:star: referencesで作成
references を使用すると、関連付けに必要なカラムを自動的に追加することができます。

rails g model LookCount user:references book:references
$ rails db:migrate

:shamrock: アソシエーション追加

user.rb
 has_many :look_counts, dependent: :destroy

user

book.rb
 has_many :look_counts, dependent: :destroy

references を使用して関連付けを行ったので自動で作成されている
(以下のようになっていればOK!)

look_count.rb
class LookCount < ApplicationRecord
  belongs_to :user
  belongs_to :book
end

:shamrock: コントローラー

books_controller.rb
  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

:snowflake: @book = Book.find(params[:id]) :特定の本をデータベースから一つ取得します。

:snowflake:LookCount.find_by(user_id: current_user.id, book_id: @book.id)
(current_user)と表示されている本(@book)に関連する閲覧数オブジェクトを検索します。
もし、現在のユーザーがこの本を閲覧した回数を記録していなければ、以下の処理を実行します。

:snowflake:current_user.look_counts.create(book_id: @book.id)
現在のユーザーと表示している本に関連する閲覧数オブジェクトを作成し、それをデータベースに保存します。
これにより、閲覧数が記録されます。

:shamrock: views

閲覧数を表示したいところに以下を追加する。

<td>閲覧数:<%= @book.look_counts.count %></td>

:snowflake:この本(@book) がいくつの閲覧数(look_counts)を持っているかを数えます

:cherry_blossom: 完成イメージ

スクリーンショット 2023-07-08 10.31.13.png


:hatching_chick: ひとこと

ご覧いただきありがとうございました!
プログラミングを始めて1ヶ月程度の初心者です。
間違っている部分がありましたら教えて頂けると幸いです。
ではでは〜

:globe_with_meridians: 以下を参考にさせて頂きました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0