0

以下のコードで...

<%= image_tag comment.user.avatar.url(:medium), class: "circle-extrasmall" %>
<%= comment.user.name %>

エラーが発生します...

undefined method `avatar' for nil:NilClass

ユーザーとコメントの適切な関連付けを作成できたと思います。

これがコントローラーの中身です...

class CommentsController < ApplicationController

def create
@challenge = Challenge.find(params[:challenge_id])
@comment = @challenge.comments.create(params[:comment])
@comment.user_id = current_user
flash[:notice] = "Comment has been created!"
redirect_to @challenge
end

end

モデルの内容は次のとおりです...

class Comment < ActiveRecord::Base
attr_accessible :challenge_id, :user_id, :text

validates :user_id, presence: true

belongs_to :challenge
belongs_to :user
end

しかし、何がそのエラーの原因なのかわかりません。Ruby-on-Rails は初めてです。ご提案いただきありがとうございます。

4

2 に答える 2

1

あなたのエラーによると、ユーザーは のために保存していませんcomment。したがって、のエラーが表示されcomment.user.avatarます。avatarユーザー オブジェクトが nil の場合、その値を取得できません。

あなたのコードでは、メソッドを作成するcomment.user必要がありますcurrent_user

次のように作成メソッドを編集できます

def create

@challenge = Challenge.find(params[:challenge_id])
@comment = @challenge.comments.build(params[:comment])
@comment.user = current_user

@comment.save
flash[:notice] = "Comment has been created!"
redirect_to @challenge
end
于 2013-07-18T07:43:04.950 に答える
0

作成アクション コードを変更してください

@comment = @challenge.comments.new(params[:comment])
@comment.user_id = current_user.id
@comment.save

user_id を持たないレコードがすでにいくつかあるためです。したがって、これらのレコードを削除する必要があります。または、今のところ、次のようにしてこのエラーを取り除くことができます

<% comment_user = comment.user%>
<%= image_tag comment_user.avatar.url(:medium), class: "circle-extrasmall" unless comment_user.blank?%>
<%= comment_user.name unless comment_user.blank?%>
于 2013-07-18T07:41:01.690 に答える