前提・実現したいこと
現在メッセージ投稿アプリを作成しています。
ビューファイルでのエラーにつまづいています。アソシエーションを組んだ状態で変数を利用して投稿内容(投稿者、投稿日時、投稿メッセージ)を出力したいです。
rails初心者です。よろしくお願いいたします。
発生している問題・エラーメッセージ
NoMethodError in Comments#index Showing /Users/Desktop/debate-app/debate-app/app/views/comments/index.html.erb where line #32 raised: undefined method `coach' for #<Comment::ActiveRecord_Relation:0x00007fd52b07c058>
<div class="comment-user"> <!-- 投稿したユーザー名情報を出力する --> <%= @commented.coach.name %> ←ここの行です。 </div> <div class="comment-date"> <!-- 投稿した時刻を出力する -->
コード
commentコントローラー エラー部分 def create @debate = Debate.find(params[:debate_id]) if coach_signed_in? @comment = @debate.comments.new(coach_comment_params) else user_signed_id? @comment = @debate.comments.new(user_comment_params) end if (@comment || @comments).save redirect_to debate_comments_path(@debate) else @comments = @debate.comments.includes(:coach) @comments = @debate.comments.includes(:user) render :index end end
commentモデル class Comment < ApplicationRecord belongs_to :debate belongs_to :user, optional: true belongs_to :coach, optional: true has_one_attached :image has_one_attached :video validates :content, presence: true validates :content, presence: true, unless: :was_attached? || :is_attached? def was_attached? self.image.attached? end def is_attached? self.video.attached? end mount_uploader :video, VideoUploader end
画像、動画投稿実装前のエラーが出ないビューの表示 <% if user_signed_in? %> <% @commented.all.each do |comment| %> <a href="#" id="name"><%= current_user.name %></a> <%= l comment.created_at %><br> <%= comment.content %><br> <% end %> <% else coach_signed_in? %> <% @commented.all.each do |comment| %> <a href="#" id="name"><%= current_coach.name %></a> <%= l comment.created_at %><br> <%= comment.content %><br> <% end %> <% end %>
投稿をeach文で取り出すとエラーが出ないためそれで行っていましたが、そのあとの実装する画像投稿や動画投稿の際にeach文のallが原因で違うエラーが出たため、each文を使わないもしくは、each文のallでエラーが出ない表示方法を実装したいと思ったためです。
改善方法がありましたら、教えていただきたく思います。
補足情報(FW/ツールのバージョンなど)
文章が拙く、申し訳ございません。
もし何か不足している、知りたいコードがありましたら、コメントをお願いします。
よろしくお願いいたします。
あなたの回答
tips
プレビュー