我有:
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
回调。情况似乎并非如此。
知道为什么这不起作用以及我如何补救它?
答案 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