轨道防止删除孩子,除非父母被删除
-
26-12-2019 - |
题
在Ruby上的Rails 4中,让我们说父母有很多孩子。删除父级后,还必须删除子项。除此之外,除非是孤儿,否则不得删除孩子。怎么做?
我尝试过以下
class Parent < ActiveRecord::Base
has_many :children, inverse_of: :parent, dependent: :destroy
end
class Child < ActiveRecord::Base
belongs_to :parent, inverse_of: :children
before_destroy :checks
private
def checks
not parent # true if orphan
end
end
.
但是,与BEREAR_DESTROY检查,没有任何删除。如果被调用的原因是因为父删除?,有没有办法讲述这种方法
这是一个奇怪的事情吗?我的意思是,防止缺失孩子。
解决方案
从鲤鱼的回答从Rails:如何在父母被销毁时丢失之前禁用_destroy回调(:dependent=>:destroy),尝试:
儿童:
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
.
我们必须这样做,因为我们正在使用偏执狂,并且生成的删除而不是软删除它们。我的肠道告诉我,有更好的方法来做到这一点,但这并不明显,这一切都得到了完成的工作。
不隶属于 StackOverflow