我的 Rails 应用程序中有一条记录after_destroy
需要知道记录被破坏的原因的钩子。更具体地说,如果该记录由于其父记录而被级联销毁dependent: :destroy
,它需要采取与单独销毁记录不同的方式。
我想做的是看看它的父母是否是destroyed?
,只是为了弄清楚dependent: :destroy
回调在父级被销毁之前完成。这是有道理的,因为它应该能够失败。 (即限制)。
那么,我该怎么做呢?
解决方案#1
如果您的模型足够简单并且不需要在子关系中调用任何回调,则可以使用dependent: delete_all
在父级中。
解决方案#2
对于更复杂的场景,您可以使用destroyed_by_association
,它返回一个ActiveRecord::Reflection::HasManyReflection
当它是级联的一部分时为 object,否则为 nil:
after_destroy :your_callback
def your_callback
if destroyed_by_association
# this is part of a cascade
else
# isolated deletion
end
end
我刚刚在 Rails 4.2 中尝试过,它有效。
Source: https://github.com/rails/rails/issues/12828#issuecomment-28142658 https://github.com/rails/rails/issues/12828#issuecomment-28142658
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)