使用以下代码......
<%= 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的新手。提前感谢您的建议。
答案 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?%>