我在创建一个零对象吗? (未定义的方法___为nil:NilClass)错误 - ruby​​ on rails

时间:2010-10-04 21:54:59

标签: ruby-on-rails

我的验证工作了一段时间,或者我认为。现在我在做了一些其他事情后回到他们身边,我收到了上面的错误。我认为这意味着我正在使用.new方法创建一个nil对象,但我只是迷失了。控制器创建一个新对象似乎是个问题,因为即使我在验证结果中,@ thing的另一个属性树中的下一个验证也会引发同样的错误。然而,即使我在控制台中创建对象并测试它,那么.save方法仍会抛出错误 - 未定义的方法'user_id'为nil:NilClass

ThingsController:

def create
  @thing = Thing.new(params[:thing])
  @thing.user_id = @currentuser_id

  if @thing.save
    flash[:notice] = "Successfully created thing."
    redirect_to @thing
  else
    #flash[:notice] = "Your thing did not get created."
    render 'otherthings/show'      
  end
end

Thing.rb
  validate :user_valid
  def user_valid
    errors.add("you must be logged in to add a thing") unless @thing.user_id?
  end

我在rails noob上有点红宝石(即< 8weeks),这是我的第一个stackoverflow问题,所以如果这是非常明显的话,请放轻松。我也尝试了params [“thing”],因为在手动创建params以匹配日志文件之后在控制台中工作(而params [:thing]没有)但是这并没有改变错误方面的任何内容我得到的消息。

1 个答案:

答案 0 :(得分:2)

当您致电unless @thing.user_id?时,它正在翻转,因为没有@thing(它不会从您的控制器传递到您的模型作为实例变量)。

我不记得它是如何工作的,但我很确定在调用validate :user_valid时,它会传递给你的记录。如果确实如此,你可以试试:

def user_valid
  errors.add("you must be logged in to add a thing") unless user_id?
end