Ruby on rails 显示用户时出错';s名称和用户';与评论相关联的头像

Ruby on rails 显示用户时出错';s名称和用户';与评论相关联的头像,ruby-on-rails,ruby-on-rails-3.2,comments,model-associations,Ruby On Rails,Ruby On Rails 3.2,Comments,Model Associations,使用下面的代码 <%= image_tag comment.user.avatar.url(:medium), class: "circle-extrasmall" %> <%= comment.user.name %> 我认为我已经为用户和评论创建了正确的关联 这是控制器中的内容 class CommentsController < ApplicationController def create @challenge = Challenge.find(par

使用下面的代码

<%= image_tag comment.user.avatar.url(:medium), class: "circle-extrasmall" %>
<%= comment.user.name %>
我认为我已经为用户和评论创建了正确的关联

这是控制器中的内容

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 CommentsController
这是模型中的内容

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

validates :user_id, presence: true

belongs_to :challenge
belongs_to :user
end
class注释

但是,我不确定是什么导致了这个错误。我是RubyonRails新手。提前感谢您的建议。

请更改创建操作代码

@comment = @challenge.comments.new(params[:comment])
@comment.user_id = current_user.id
@comment.save
由于您已经有一些没有用户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?%>

根据您的错误,用户没有保存
注释。因此它显示了
comment.user.avatar
的错误。当用户对象为nil时,您无法获取其
化身

在代码创建方法中,用户应为当前用户

您可以编辑create方法,如

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

我仍然得到同样的错误。。。nil的未定义方法“avatar”:NilClassyes,这是因为您的数据库中有一些记录没有用户id。因此,请删除这些记录,或者您可以这样做,我不再收到nil错误。但是,它仍然没有显示用户名或头像。我认为在创建注释时,用户id不会被添加到注释中。模型中的validates:user\u id,presence:true不允许我发表评论,这意味着它无法识别当前的用户id。有什么想法吗?不久前我还运行了一个迁移AddUserIdToComments,所以看起来用户id作为一个整数包含在表中。我不知道为什么它不能识别它。@Ethan,我也对你的应用程序的这种行为感到惊讶。嗯。。请删除评论中的所有记录,并尝试使用我的代码创建新记录。我修改了操作代码..我仍然收到相同的错误。。。nil的未定义方法“avatar”:nilclass你在保存的评论对象中找到用户id了吗?我认为当用户创建一个评论时,它不会将用户id添加到评论中。有什么办法吗?
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