在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
.

我们必须这样做,因为我们正在使用偏执狂,并且生成的删除而不是软删除它们。我的肠道告诉我,有更好的方法来做到这一点,但这并不明显,这一切都得到了完成的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top