我有一种情况,我想在另一个对象被销毁后更新父对象的依赖关系。这是类层次结构的示例:
class Parent < ActiveRecord::Base
has_one :info, :dependent => :destroy
has_many :conditions, :dependent => :destroy
....
end
class Info < ActiveRecord::Base
belongs_to :parent
def recalculate
# Do stuff
end
....
end
class Condition < ActiveRecord::Base
belongs_to :parent
has_one :condition_detail
after_destroy :update_info
def update_info
parent.info.recalculate
parent.info.save(:validate => false)
end
....
end
问题是当父级被销毁时,它会破坏条件,然后触发 after_destroy 回调并在 info 对象已经被销毁后保存它。所以在父级被销毁后,信息仍然存在。如果我不绕过验证,保存将默默地失败,这是我不想要的。并使用保存!引发异常。
Condition 上的回调必须是 after_destroy,否则 Info 上的 recalculate 方法将无法正确表示关系的状态来计算它需要什么。
我觉得当父级被销毁时我需要一种绕过回调的方法,但我认为这是不可能的。我不能使用dependent => delete_all,因为这不会破坏 Condition 的孩子。我尝试查看是否有一种方法可以判断父级是否调用了 destroy 并使用该信息绕过 after_destroy 中的保存,但这似乎也不起作用。
任何帮助将不胜感激,谢谢!