【问题标题】:Undefined method '+' for nilclass with rails model (active record)带有rails模型的nilclass的未定义方法“+”(活动记录)
【发布时间】:2016-04-13 15:09:22
【问题描述】:

我有一个带有一些整数值的简单模型(我认为,我至少在迁移文件中将它们设置为整数),我只是想用模型的成员函数来增加它们,但是当我尝试添加时对他们来说,我收到错误“未定义的方法 `+' for nil:NilClass)

这里有什么提示吗??

def take()
    @total -= 1
    User.find(@poster_id).lifetime -= 1
end

def give()
    @total += 1
....

真的没什么,只是简单的不工作。我需要以某种方式投射这些吗?我确保在模型类的每次实例化时将值初始化为 0

【问题讨论】:

  • 您好,total 是一个默认值为 0 的表列吗?
  • @NitinSrivastava 是的
  • 您是否意识到,您从未定义过@total 变量? (不管是什么)
  • @AndreyDeineko 不是由 activerecord 在模型中定义的吗?在课堂之外,我可以使用 object.total 访问它
  • @Riptyde4 不作为实例变量。这是一种自我的方法。所以如果你想访问 total 它应该是 self.total 或者只是 total。

标签: ruby-on-rails ruby activerecord model-view-controller model


【解决方案1】:

首先,如果total 是数据库中的一个列(你说它是),那么在类的实例方法中,你应该以total 访问它,而不是@total。其次,如果你想更新 total 属性,你应该更新它:)

def take # notice no () - they are optional
  update(total: self.total - 1)
end

def give
  update(total: self.total + 1)
end

poster_id 类比(如果它再次是数据库中的一列),您会这样做:

user = User.find(poster_id) # notice not @poster_id
user.update(lifetime: user.lifetime - 1)

【讨论】:

  • 这不正常,我有两个计数器,更新一个会将另一个覆盖为 0。update 和 update_attribute 的结果相同
  • 我不知道你说的是哪个计数器,但我已经回答了你的问题,如果我理解你的话,我已经在 cmets 中澄清了。我解释了为什么你会得到这个例外,以及如何让你展示你想要做的事情。您试图更新对象的属性 - 我解释了如何。您可以提出一个新问题并在问题文本中保持准确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2014-02-13
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多