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。当用户对象为 nil 时,您无法获得其avatar值。

在您的代码中创建方法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 回答