Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails indexページに閲覧数を表示させたいのですが、ActiveRecord::RecordNotFoundエラーが出てしまいます。 初心者のため凡ミスかもしれません

解決したいこと

posts/indexページに閲覧数の表示をしたいです

発生している問題・エラー

ActiveRecord::RecordNotFound in PostsController#index
Couldn't find Post without an ID

@post_like_count = Like.where(post_id: @posts.pluck(:id)).group(:post_id).count
@post_comments_count = Comment.where(post_id: @posts.pluck(:id)).group(:post_id).count
@post_detail = Post.find(params[:id])<ーーここ

該当するソースコード

posts_controller.rb
  def index
    @posts = Post.all.order(created_at: :desc).page(params[:page])
    @post_like_count = Like.where(post_id: @posts.pluck(:id)).group(:post_id).count
    @post_comments_count = Comment.where(post_id: @posts.pluck(:id)).group(:post_id).count
    @post_detail = Post.find(params[:id])<ーー エラー

  end
  
  def show
    @post = Post.find_by(id: params[:id])
    @user = @post.user
    @likes = Like.where(user_id: @user.id)
    @likes_count = Like.where(post_id: @post.id).count
    @comments_count = Comment.where(post_id: @post.id).count
    @comment = Comment.new
    @comments = @post.comments.includes(:user)
    @post_detail = Post.find(params[:id])
    if @current_user.present?
      unless ViewCount.find_by(user_id: @current_user.id, post_id: @post_detail.id)
        @current_user.view_counts.create(post_id: @post_detail.id)
      end
    end
  end

posts/index.html.erb
<span class="fa fa-eye"></span>
<%= @post_detail.view_counts.count %>
posts/show.html.erb
<span class="fa fa-eye"></span>
<%= @post_detail.view_counts.count %>

最後まで読んでいただきありがとうございます
教えていただけると幸いです。

0

1Answer

こんにちは!

まず表題のエラーについてですが、

terminal
Couldn't find Post without an ID

とあるように、 params[:id] で取得している値が nil になっていることが分かります。
ルーティングなどの情報が無いので推測になりますが、resourcesを用いてルーティングを生成している場合、URLにidが付与されないために params[:id] でデータは取得できません。
そもそも論ですがindexは一覧画面に該当するので、URLにidを付与する必要がないとも言えます。

一覧画面で1つ1つのPostに対する閲覧数を表示させたいというご認識でしょうか。
こちらであれば @postsをeach文で回して ブロック変数.view_counts.count の形で実装すれば、1投稿あたりの閲覧数を表示できるのではないかと思います。

0Like

Comments

  1. @NetaNeta0620

    Questioner

    ありがとうございます!
    動作しました
    こんな簡単だったんですね!!
  2. 良かったです~!笑
    実装応援しています!(*'▽')
  3. @NetaNeta0620

    Questioner

    もう一点お伺いしたいのですが
    閲覧数が0の時非表示にしようと思い以下のコードを記述したのですが、

    <%= post.view_counts.count if post.view_counts.count.count != 0 %>

    NoMethodError in Posts#indexが出てしまうのですが、なにが邪魔をしているのでしょうか?
  4. @NetaNeta0620

    Questioner

    .countが一個多かっただけでした
    お騒がせしました

Your answer might help someone💌