nil的未定义方法`user_name':NilClass

时间:2017-01-18 05:03:13

标签: ruby-on-rails

我正在尝试创建一个简单的rails应用程序,其中useres可以在帖子上发表评论。

当我发布新帖时,我遇到了undefined method 'user_name' for nil:NilClass错误。

具体来说,以下内容:

error page

如图所示,@ 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

感谢您的帮助。抱歉和语法错误,我已经有一段时间在做这个了,并且在我清醒时不是一个好的拼写。

3 个答案:

答案 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)

但处理此问题的理想方法是向用户模型添加状态验证,以便将来任何用户创建的所有评论都有一个名称。