我正在尝试创建一个简单的rails应用程序,其中useres可以在帖子上发表评论。
当我发布新帖时,我遇到了undefined method 'user_name' for nil:NilClass
错误。
具体来说,以下内容:
如图所示,@ post.comments似乎包含一个带有nil变量的注释。
我的评论控制器如下:
before_action :set_post
def create
@comment = @post.comments.build(comment_params)
@comment.user_id = current_user.id
if @comment.save
flash[:success] = "You commented the hell out of that post!"
redirect_to @post
else
flash[:alert] = "Check the comment form, something went horribly wrong."
redicect_to @post
end
end
#...
private
def comment_params
params.require(:comment).permit(:content)
end
def set_post
@post = Post.find(params[:post_id])
end
我的帖子控制器:
before_action :set_post, only: [:show, :edit, :update, :destroy]
before_action :owned_post, only: [:edit, :update, :destroy]
#...
def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = "Your post has been created!"
redirect_to @post
else
flash.now[:alert] = "Your new post couldn't be created! Please check the form."
render :new
end
end
#...
private
def post_params
params.require(:post).permit(:image, :description)
end
def set_post
@post = Post.find(params[:id])
end
感谢您的帮助。抱歉和语法错误,我已经有一段时间在做这个了,并且在我清醒时不是一个好的拼写。
答案 0 :(得分:1)
尝试更改
@comment.user_id = current_user.id
到
@comment.user = current_user
您需要确保在没有user / user_id的情况下不保存comment
,或者您必须处理用户/ user_id为零的视图
答案 1 :(得分:1)
您要求提供用户名,但您目前不在comment_params中允许使用user_id:
此:
def comment_params
params.require(:comment).permit(:content)
end
应该是:
def comment_params
params.require(:comment).permit(:content, :user_id)
end
您的代码也可能是:
comment.user.name
而不是
comment.user.user_name
我们需要查看您的模型以确认。我不会将user_name
用作user
的属性。
答案 2 :(得分:0)
该帖子的评论之一可能没有用户。你可以在这里使用try方法。
@comment.try(:user).try(:user_name)
但处理此问题的理想方法是向用户模型添加状态验证,以便将来任何用户创建的所有评论都有一个名称。