充当偏执狂:真正摧毁有偏执狂的记录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
关联中的属性只接受 destroy
、delete_all
、nullify
、restrict_with_exception
、restrict_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
我正在使用 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
关联中的属性只接受 destroy
、delete_all
、nullify
、restrict_with_exception
、restrict_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