Rails:为什么调用parent的before_save?

时间:2014-02-13 11:48:40

标签: ruby-on-rails ruby-on-rails-4

Job有很多发票:

class Job < ActiveRecord::Base
  has_many :invoices, :autosave => true
  before_save :set_outstanding_payments
end

class Invoice < ActiveRecord::Base
  belongs_to :job
end

更新发票(@invoice.update(...))后,系统会调用作业set_outstanding_payments

为什么?

1 个答案:

答案 0 :(得分:6)

我对这种行为感到非常惊讶,因为正如文件所述,只有父母被保存时才会触发自动保护。

原因可能是因为在您的作业关联中使用:autosave => true声明会导致子更新在父级上调用保存

在父节点上调用save时,将调用所有保存挂钩。尽管如此,请确保在Invoice模型中与父母混淆时没有任何 之后的更新挂钩。

有关自动保存关联功能的更多信息,请参阅此链接:

http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html

我希望它有所帮助。