如何在Rails中增加子模型值?

时间:2012-02-28 23:14:45

标签: ruby-on-rails-3 find increment

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

处理这个问题的最佳方法是什么。我真的很困惑如何检索特定对象并增加它的属性

1 个答案:

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