充当偏执狂:真正摧毁有偏执狂的记录children

Act As Paranoid: really destroy record that has paranoid children

我正在使用 ActAsParanoid gem 软删除一些记录,比方说 children。 parent 不是偏执狂,我希望在销毁 parent 时,children 真的被销毁了。

class Parent < ApplicationRecord
  has_many :children, dependent: :destroy
end

class Child < ApplicationRecord
  act_as_paranoid 
  belongs_to :parent
end

我现在看到 children 正在被软删除,以防止 parent 被销毁,因为 child 中的引用变得无效。 parent销毁后,如何让children真正销毁? (我想知道我是否可以避免自定义回调)

更新:

如果有一个 children 先前已被删除,则使用 dependent: :delete_all 会产生相同的错误。

实际上 Paranoia gem 并未考虑您的情况。如果您查看文档,还有 examples 其他场景,但没有您想要的。

dependent has_many 关联中的属性只接受 destroydelete_allnullifyrestrict_with_exceptionrestrict_with_error 作为你可以看到here。所以你不能在那里调用 really_destroy!

幸运的是,有一个 before_destroy 回调可用于在每个 children 中执行 really_destroy!。尝试这样的事情:

class Parent < ApplicationRecord
  has_many :children

  before_destroy :really_destroy_children!

  private

  def really_destroy_children!
    children.with_deleted.each do |child|
      child.really_destroy!
    end
  end

end