回调没有调用自动保存

时间:2014-09-17 15:17:06

标签: ruby-on-rails rails-activerecord

我有:

class Parent < ActiveRecord::Base
  has_many :things
  before_save :update_something
private
  def update_something
    self.update_column(:something, "something")
  end
end

class Thing < ActiveRecord::Base
  belongs_to :parent, autosave: true
end

我希望当我保存Thing的实例时,也应该保存它Parent。我还希望Parent的实例调用它的before_save回调。情况似乎并非如此。

知道为什么这不起作用以及我如何补救它?

1 个答案:

答案 0 :(得分:1)

参考文档

  

如果将:autosave选项设置为true,则Rails将保存所有已加载的选项   成员并摧毁任何标记为销毁的成员   保存父对象。

如果您想要使用Rails方式,我建议您为Thing更新父级创建新的after_save回调。

但OO方式是创建处理保存对象的类,例如:

class ThingUpdater
  def initialize(thing)
    @thing = thing
  end

  def call(params)
    @thing.update_attributes(params)
    @thing.parent.update_something
  end
end

多亏了这一点,你将避免回调地狱 - 同时采取look here