The*_*ter 11 activerecord ruby-on-rails callback
我在我的Rails应用程序中有一个记录after_destroy,需要知道记录被破坏的原因.更具体地说,如果记录在级联中被破坏,因为它的父级说dependent: :destroy,它需要做的事情与记录被单独销毁时不同.
我试图做的是看看它的父母是否destroyed?,只是想知道dependent: :destroy在父母被摧毁之前完成了回调.这是有道理的,因为它应该能够失败.(即限制).
那么,我该怎么做?
解决方案#1
如果您的模型足够简单并且您不需要在子关系中调用任何回调,则可以dependent: delete_all在父关系中使用.
解决方案#2
对于可以使用的更复杂的场景destroyed_by_association,ActiveRecord::Reflection::HasManyReflection当它是级联的一部分时返回一个对象,否则返回nil:
after_destroy :your_callback
def your_callback
if destroyed_by_association
# this is part of a cascade
else
# isolated deletion
end
end
Run Code Online (Sandbox Code Playgroud)
我刚刚在Rails 4.2中尝试了这个并且它可以工作.
资料来源:https://github.com/rails/rails/issues/12828#issuecomment-28142658
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |