回答:
違いはコールバックです。
: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である必要があり、削除されるレコードは、関連付けられたレコードではなく、結合レコードです。