回答:
違いはコールバックです。
:delete_allアプリケーション内で直接行われ、SQLによって削除されます。
DELETE * FROM users where compagny_id = XXXX
を使用すると:destroy、すべての子供がインスタンス化されます。したがって、それを破棄できない場合、またはそれぞれに独自のがある場合:dependent、そのコールバックを呼び出すことができます。
Railsのモデルの関連付けでは、:dependentオプションを指定できます。これは、次の3つの形式のいずれかになります。
:destroy/:destroy_all関連するオブジェクトは、そのdestroyメソッドを呼び出すことにより、このオブジェクトとともに破棄されます:delete/:delete_all関連するすべてのオブジェクトは、:destroyメソッドを呼び出さずにすぐに破棄されます:nullifyすべての関連オブジェクトの外部キーはNULL、saveコールバックを呼び出さずに設定されます:restrict。:restrictに設定すると、関連付けられたオブジェクトがある場合、このオブジェクトは削除できません。
:deleteか:destroy_all?:dependentオプションは、:destroy、:delete_all、:nullifyまたは:restrict(:delete)のいずれかを想定しています
:deleteおよび:destroy_allオプションは存在しません。しかし、と呼ばれているモデルのクラスメソッドが存在deleteし、destroy_allそれが混乱の原因かもしれません。
参照してください。削除にその関連要素破壊DELETE_ALLが自己のテーブルから複数のデータを削除することができますようにDELETE * FROM table where field = 'xyz'
:依存可能なオプション:
所有者が破棄されたときに関連オブジェクトに何が起こるかを制御します。これらはコールバックとして実装され、Railsはコールバックを順番に実行することに注意してください。したがって、他の同様のコールバックが:dependent動作に影響する可能性があり、その:dependent動作は他のコールバックに影響する可能性があります。
:destroy 関連するすべてのオブジェクトも破棄されます。
:delete_all すべての関連オブジェクトがデータベースから直接削除されます(したがって、コールバックは実行されません)。
:nullify外部キーをNULLに設定します。コールバックは実行されません。
:restrict_with_exception 関連するレコードがある場合、例外が発生します。
:restrict_with_error 関連付けられたオブジェクトがある場合、所有者にエラーが追加されます。
:throughオプションとともに使用する場合、結合モデルの関連付けはbelongs_toである必要があり、削除されるレコードは、関連付けられたレコードではなく、結合レコードです。