前提・実現したいこと
現在railsで投稿アプリを作成しています。
ルームの中で二人(user, coach)がコメントや画像、動画を送りあえるアプリで、ルームの中でどちらが送ってきたのかを判断するために、投稿の横に送信者の名前を表示させたいです。現在はcurrent_user.nameの表示なので、ログインしている人の名前が表示されてしまっています。
commentとアソシエーションを組んでいるので、comment.user.nameとすれば解決すると考えましたが、エラーが出てしまいました。
rails初心者で解決できないでいます。お力添えをよろしくお願いいたします。
発生している問題・エラーメッセージ
NoMethodError in Comments#index undefined method `name' for nil:NilClass
<% if user_signed_in? %> <% @comments.each do |comment| %> <a href="#" id="name"><%= comment.user.name %></a><br> <ーここの部分です <%= comment.content %> <%= l comment.created_at %><br> <% if comment.image.attached? %>
ビューファイル <% if user_signed_in? %> <% @comments.each do |comment| %> <a href="#" id="name"><%= comment.user.name %></a><br> <%= comment.content %> <%= l comment.created_at %><br> <% if comment.image.attached? %> <%= image_tag comment.image.variant(resize: '500x500') %><br> <% end %> <% if comment.video.attached? %> <video src="<%= rails_blob_path(comment.video) %>" style="width: 400px; height: 400px", type="video/mp4" controls></video><br> <% end %> <% end %> <% else coach_signed_in? %> <% @comments.each do |comment| %> <a href="#" id="name"><%= comment.coach.name %></a><br> <%= comment.content %> <%= l comment.created_at %><br> <% if comment.image.attached? %> <%= image_tag comment.image.variant(resize: '500x500') %><br> <% end %> <% if comment.video.attached? %> <video src="<%= rails_blob_path(comment.video) %>" style="width: 400px; height: 400px", type="video/mp4" controls></video><br> <% end %> <% end %> <% end %>
試したこと
エラーの原因は、
commentにuser, coachが結びついているが、userログイン時に投稿したcommentから、coachでログインした時にも情報を取得しようとしているためでした。(comment.coach.nameはcoachで投稿、ログインした時には表示されるが、userでログインしたときはcomment.user.nameとビューがなっているので、userからcoachの情報を取り出そうとしているから。ビューファイルのコードをご確認ください。) ※文章が拙くて申し訳ありません。伝わらなかったらコメントください。
解決するより良いコードがありましたら、教えていただけると幸いです。
補足情報(FW/ツールのバージョンなど)
もし何か不足している、知りたいコードがありましたら、コメントをお願いします。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。