说我有:
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文档在这个主题上非常稀少。
答案 0 :(得分:2)
它肯定会销毁所有连接的z对象,这会在您的数据库上造成很多业务错误。
恕我直言,我会重构这个建模。处理这种关系可能会非常糟糕。你有没有改造的原因?
也许如果只是改变验证可行,或者甚至让X和Y继承一些与X类建立关系的ohter类。
答案 1 :(得分:1)
我还没有对它进行测试,但我认为z
无论与y
的关联如何都会被销毁。
至于含义...... :destroy
将首先实例化z
的每个实例并在其上调用:destroy
。如果由于z
上的验证/挂钩而失败,则原始x
将无法销毁。
此外,如果x
有成千上万的{{1}},则可能需要一些时间,此时z's
可能会更好。