我们有小班,具有相关类rails 3.2:after_update在销毁元素时也被调用?
class Car
has_one :engine, :dependent => :destroy
after_update :save_engine
delegate :oil_level, :oil_level=, :to => :engine
def save_engine
engine.save if engine
end
end
正如你所知道的,我们正在努力工作,围绕孩子的不会自动保存在轨道的问题。所以我们可以在车上设置oil_level
,并且在保存时将它正确地存储在engine
中。
现在当我们尝试删除汽车时会发生什么?显然engine
永远不会被删除,这是由after_update
,这将重新保存刚刚删除的引擎造成的。所以汽车被成功删除,但引擎被重新创建(一个新的ID),并不再与汽车相关联。我想要正确删除引擎。
我没有找到一个坚实的变通:
class Car
has_one :engine, :dependent => :destroy
after_update :save_engine
before_destroy :set_destroying
delegate :oil_level, :oil_level=, :to => :engine
def set_destroying
@destroying = true
end
def save_engine
engine.save if engine && [email protected]
end
end
但它仍然感觉有点脏,好像应该有更好的方式来做到这一点。 破坏时调用after_update
似乎有点不合逻辑。 是否有一个特定的轨道方式来知道回调(保存/创建/销毁)中实际进行的操作?简而言之:什么是正确的方法来处理这个问题?或者这实际上是一些轨道bug?或者这是预期的行为?
这听起来像它可能正是我所需要的。我会尝试这个,并让你知道。谢谢。 – nathanvda 2012-02-14 20:30:03