显示与评论​​关联的用户姓名和用户头像时出错

时间:2013-07-18 07:37:36

标签: ruby-on-rails ruby-on-rails-3.2 comments model-associations

使用以下代码......

<%= 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的新手。提前感谢您的建议。

2 个答案:

答案 0 :(得分:1)

根据您的错误,用户没有为comment保存。所以它显示了comment.user.avatar的错误。当用户对象为零时,您无法获得其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

答案 1 :(得分: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?%>