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 に答える