1

说我有:

class X < ActiveRecord::Base
  has_many :z, :dependent => :destroy
end

class Y < ActiveRecord::Base
  has_many :z, :dependent => :destroy
end

class Z < ActiveRecord::Base
  belongs_to :x
  belongs_to :y
end

... 然后我:

x.destroy

z如果它也属于 会被销毁吗y

我知道测试非常简单,如果我没有得到任何回复,我会这样做并回答我自己的问题,但除了正确答案之外,我还想更好地了解 :dependent => :destroy 的工作原理如果有任何其他影响我需要注意。ActiveRecord::Base 文档在这个主题上非常稀少。

4

2 回答 2

2

它肯定会破坏所有连接的 z 对象,这会在您的数据库上产生很多业务错误。

恕我直言,我会重构这个建模。处理这种关系可能会非常糟糕。有不能改造的理由吗?

也许如果只是改变验证可以工作,或者甚至让 X 和 Y 继承一些与 X 类建立关系的其他类。

于 2012-11-14T19:29:42.530 回答
1

我没有测试过它,但我认为z不管它与y.

至于含义...:destroy将首先实例化每个实例z并调用:destroy它。如果由于验证/挂钩而失败,z那么原始文件x将无法被销毁。

此外,如果x有成千上万个z's可能需要一些时间,此时:delete_all可能会更好。

于 2012-11-14T19:24:53.687 回答