Hello stackoverflowers !!!!
我有2个型号:
模型/ user.rb
class User
has_many :colleagues
before_save :give_points
private
def give_points
if self.name == "Jordie"
colleague1 = Colleague.find_by_name("Ann")
colleague2 = Colleague.find_by_name("Beth")
colleague1.increment!(:bonus, by = self.points)
colleague1.decrement!(:bonus, by = self.points)
end
end
end
模型/ user.rb
class Colleague
belongs_to :user
end
事实上,当Jordie给予奖金时,我想增加和减少Ann和Beth。但我得到以下内容:
undefined method `increment!' for nil:NilClass
处理这个问题的最佳方法是什么。我真的很困惑如何检索特定对象并增加它的属性
答案 0 :(得分:2)
一般来说,获得
undefined method "something" for nil:Class
意味着接收器是零!您是否使用debugger
检查对象colleague1是否为零?如果它不是nil,则意味着increment!
的内部指令也被称为增量,我对此有严重的怀疑。
我在您的代码中发现可疑的是您在函数调用中使用by = self.points
。在ruby中,当一个方法期望:by => self.points
作为最后一个参数并且你知道它期望by: self.points
为一个时,你可以写Hash
(或当你说ruby 1.9.x时为:by
)的密钥,或只是self.points
,根据rails doc,增量的签名是:
increment(attribute, by = 1)
这意味着您应该通过调用:
来使用此方法colleague1.increment!(:bonus, self.points)