gpt4 book ai didi

ruby-on-rails - rails : how to disable before_destroy callback when it's being destroyed because of the parent is being destroyed (:dependent => :destroy)

转载 作者:行者123 更新时间:2023-12-03 12:46:53 27 4
gpt4 key购买 nike

我有两个类(class): parent 和 child

child :

belongs_to :parent



家长
has_many :children, :dependent => :destroy

问题是我想检查是否总是至少有一个 child 在场,所以我在 Child 中有一个 before_destroy 方法,如果它是属于其 parent 的唯一 child ,则中止销毁。

而且,如果我想销毁父级,它会在每个子级上调用 before_destroy 回调,但是当有一个子级时,它将中止销毁,因此父级永远不会被销毁。

只有当它没有因为它的父级而被销毁时,我才能告诉 child 调用 before_destroy 回调?

谢谢!

最佳答案

如果您在 before_destroy 方法上将 prepend 设置为 true,则上述 carp 的答案将起作用。试试这个:

child :

belongs_to :parent
before_destroy :prevent_destroy
attr_accessor :destroyed_by_parent

...

private

def prevent_destroy
if !destroyed_by_parent
self.errors[:base] << "You may not delete this child."
return false
end
end

家长:
has_many :children, :dependent => :destroy
before_destroy :set_destroyed_by_parent, prepend: true

...

private

def set_destroyed_by_parent
children.each{ |child| child.destroyed_by_parent = true }
end

我们必须这样做,因为我们使用的是 Paranoia,并且 dependent: delete_all将硬删除而不是软删除它们。我的直觉告诉我有更好的方法可以做到这一点,但这并不明显,这可以完成工作。

关于ruby-on-rails - rails : how to disable before_destroy callback when it's being destroyed because of the parent is being destroyed (:dependent => :destroy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com