これはすべての本を破壊します。それらのすべて。
has_many books, :dependent => :destroy
覚えておくべき重要なことは、関連するすべてのブックでメソッドが:dependent => :destroy
呼び出されることです。#destroy
各ブックを呼び出すことにより#destroy
、各ブックに対して任意のbefore_destroy
またはafter_destroy
コールバックが実行されます。
当然、依存する本がたくさんある場合、このプロセスは費用がかかる可能性があります。
は:destroy_all
無効です、多分あなたは考えてい:delete_all
ました。:delete_all
(だけでなく)との違い:destroy
は、Railsが単一のSQLステートメントを発行して、依存するすべての本のレコードを削除することです。#destroy
Bookレコードではメソッドは呼び出されず、noまたはbefore_destroy
callbackafter_destroy
は実行されません。
利点は、単一のSQLステートメントが、各レコードを呼び出すよりも、データベースからレコードを削除する方が何倍も効率的#destroy
であることです。
これを知ることは非常に重要です。Bookモデルにコールバックがある場合、定義すると、Bookモデルで定義したコールバックを無視する効果が*_destroy
あることに注意してください。:dependent => :delete_all