模型X和模型Y每个has_many Z,:dependent => :破坏。如果我摧毁X,Z会被摧毁吗?

时间:2012-11-14 19:17:30

标签: ruby-on-rails activerecord

说我有:

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 =&gt ; :破坏工作,如果有任何其他影响我需要注意。 ActiveRecord :: Base文档在这个主题上非常稀少。

2 个答案:

答案 0 :(得分:2)

它肯定会销毁所有连接的z对象,这会在您的数据库上造成很多业务错误。

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

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

答案 1 :(得分:1)

我还没有对它进行测试,但我认为z无论与y的关联如何都会被销毁。

至于含义...... :destroy将首先实例化z的每个实例并在其上调用:destroy。如果由于z上的验证/挂钩而失败,则原始x将无法销毁。

此外,如果x有成千上万的{{​​1}},则可能需要一些时间,此时z's可能会更好。