1. ホーム
  2. ruby-on-rails

[解決済み] DestroyとDeleteの違い

2022-02-06 10:20:58

質問

とはどのような違いがあるのでしょうか?

@model.destroy@model.delete

例えば

Model.find_by(col: "foo").destroy_all
//and
Model.find_by(col: "foo").delete_all

どちらを使ってもいいのでしょうか?

どのように解決するのですか?

基本的に destroy はモデル上で任意のコールバックを実行する一方で delete を使用しない。

から Rails API :

  • ActiveRecord::Persistence.delete

    データベース内のレコードを削除し、このインスタンスを凍結して、(永続化できないので) 変更を加えるべきでないことを反映します。凍結されたインスタンスを返します。

    この行は、レコードの主キーに対する SQL DELETE 文で単純に削除され、コールバックは実行されない。

    オブジェクトの before_destroy および after_destroy コールバックや、 :dependent association オプションを強制するには、 #destroy を使用します。

  • ActiveRecord::Persistence.destroy

    データベース内のレコードを削除し、このインスタンスをフリーズして、(永続化できないので)変更を加えるべきでないことを反映させます。

    destroyに関連する一連のコールバックがあります。before_destroy コールバックが false を返した場合、アクションはキャンセルされ、destroy は false を返します。詳しくはActiveRecord::Callbacksを参照してください。