Ruby Rails - 关联在 "before_destroy" 之前被删除

Ruby on Rails - Association gets deleted before "before_destroy"

我有一个对象 A has_many B 的(简单关联):

has_many :book_accounts, {
    dependent: :destroy
}

我正在处理 before_destroy 回调。我想检查并确保没有 C(belongs_to B)和 D(belongs_to C) 在销毁 A 之前。我检查了日志,所有 B 都在回调之前被删除,导致回调崩溃。

这就是 Rails 的工作方式吗?除了删除 dependent: destroy 并在 after_destroy 回调中手动销毁 B 之外,我还能做些什么吗?或者这是首选解决方案?

这是一个非常愚蠢的问题 rails,也很令人沮丧。当您在 Rails 中定义关系时,:dependent 选项实际上会创建一个回调。如果您在关系之后定义一个 before_destroy 回调,那么在关系被销毁之前不会调用您的回调。

解决方案是在声明关联之前订购 before_destroy 回调。

你的代码将是这样的

Class A < ActiveRecord::Base
  before_destroy :check

  has_many :book_accounts, dependent: :destroy
End

必须将 prepend: true 添加到回调声明中:

before_destroy :do_something_before_children_removed, prepend: true