【问题标题】:Comment form not working? (Ruby on Rails) undefined method `comments' for nil:NilClass评论表格不起作用? (Ruby on Rails) nil:NilClass 的未定义方法“注释”
【发布时间】:2015-06-07 18:18:27
【问题描述】:

你好,乐于助人的好心人。

当我尝试提交新评论时,我收到“nil:NilClass”错误的“未定义方法 `cmets”。 它突出显示了用户控制器的这一部分:

def create
    @comment = @user.comments.build(comment_params)
    @comment.user = current_user

我的 cmets 控制器:

class CommentsController < ApplicationController
def show
    @comment = Comment.find(params[:id])
  end

  def create
    @comment = @user.comments.build(comment_params)
    @comment.user = current_user

   if @comment.save
      redirect_to users_show_path, notice: 'Comment submitted!'
    else
      render 'users/show'
    end
  end

  def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy
  end

 def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy
  end

  private
  def comment_params
    params.require(:comment).permit(:comment, :username)
  end

end

我的用户模型包括 has_many :cmets 并且我的 cmets 模型有 belongs_to :user

我需要去哪里纠正这个错误?谢谢!

【问题讨论】:

  • 一点点搜索会有很长的路要走..

标签: ruby-on-rails forms methods comments


【解决方案1】:

那么,您在哪里定义了值 @user ?我看到你没有,在 Ruby 中,如果你在定义它们之前使用 实例变量,它们只会给你nil 对象作为回报。最后,您在nil 对象上调用关联方法comments。这就是你得到异常的原因。

因此,首先将@user 设置为User 实例,然后对其调用comments

【讨论】:

  • @user 不是在用户控制器中定义的吗?我还能把它放在哪里?我是新手:x 感谢您的回复
  • @icecreamrabbit 嗯。你可以把它放在你正在使用它的方法中。但是有几种方法可以做到这一点。
  • @icecreamrabbit 快速浏览一下 -- Getting Started with Rails
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多