0

のは、一例として、このケースを見てみましょう:アクティブなレコードのポリモーフィックな関連付けをカスケードするにはどうすればよいですか?

class Child < ActiveRecord::Base 
    belongs_to :fruitful, polymorphic: true 
end 

class Parent < ActiveRecord::Base 
    has_many :children, as: :fruitful, dependent: :destroy 
end 

# Once I create the parent and children 
p = Parent.create 
p.children << Child.new 
p.children << Child.new 
p.save 

# But deleting parent does not delete children: 
p.destroy # why not? 

質問は、なっている「依存:破壊する」アクティブ・レコードのポリモーフィックな関連をサポートし、私は孤立したレコードを防ぐためにbefore_destroyコールバックを実装する必要がありませんか?

答えて

1

belongs_to :parentにする必要がありますか?

parent.destroyに電話する前に、parent.reloadに電話するだけで、子供のIDを知ることができます。 << Child.newを実行すると、メモリ内のオブジェクトがデータを正確に反映しないことがあります。

編集:This guy explains it better

実際には、オブジェクトを直接操作した後にオブジェクトを直接破棄することはないと予想しています。これはコンソールの問題である可能性が高いため、アプリケーションではreloadにする必要はありません。

+1

まず、お返事ありがとうございます。第2に、これは単純な例です。実際のケースは、多態的な関連付けを使用して「子」が設定された実際のモデルであり、destroyメソッドはコントローラの「破棄」アクション内で呼び出されました。私はすべての非POLYMORFIC関係がDBから削除され、多型は保持されることが分かりました。私はレール文書にそのような関連付けに "依存する::破壊"オプションを含めないことに気づいた。 – Vlad

+0

ハ!私は実際に依存関係を追加するのを忘れていました::私のコードを破壊してください! – Vlad

関連する問題