を削除します:対破壊Mongoid依存:Mongoidはドキュメントにそれが伝え以来依存detroyと削除依存の間diffrence何reletionsを参照使用する場合
:delete: Delete the child documents.
:destroy: Destroy the child documents.
を削除します:対破壊Mongoid依存:Mongoidはドキュメントにそれが伝え以来依存detroyと削除依存の間diffrence何reletionsを参照使用する場合
:delete: Delete the child documents.
:destroy: Destroy the child documents.
はMongoidでは(ともActiveRecordの私は信じている)、delete
だけオブジェクトをデータベースから削除します。 destroy
はオブジェクトを削除し、モデルが定義した適切なコールバックをすべて実行します。したがって、モデルにbefore_destroy
コールバックがあり、そのモデルのインスタンスがdelete
の場合、before_destroy
コールバックは呼び出されません。
したがってdependent: :destroy
は、削除時にモデルのコールバックを実行し、dependent: :delete
は実行しません。
destroy
モデルコールバックを実行し、DBにREMOVEクエリを実行します。delete
は、DBに対してREMOVEクエリを作成するだけです。名前はActiveRecord
から取られています。そのため、それらはmongoとよく一致しません。
delete
はdestroy
以上の最適化として表示されます。 destroy
を使用するときは、before_destroy
のコールバックが実行されていることを確認して、適切なクリーンアップを実行します。一方、Model.destroy_all
のような操作を行う場合は、Model.delete_all
が1つのクエリを作成するかどうかにかかわらず、すべての要素をロードして、それぞれのREMOVEクエリを実行する必要があります。
コールバックがない場合は同じですか? –
ええ、おそらく 'destroy'の使用を検討します。コールバックを追加する場合は、コールバックを実際に実行させたくない場合を除いて、 'delete'から' destroy'に変更することを忘れないでください。 –
コールバックを持っていなくても同じものではありません。 'destroy'はコールバックに依存するため、コールバックを実行するために関連するドキュメントをロードし、DELETEクエリを実行する必要があります。 'delete'は単にDELETEクエリを作成します。 その後、destroyは "より安全"ですが、deleteは "より速く" – tothemario