Difference between Destroy and Delete

Saggex picture Saggex · Mar 31, 2014 · Viewed 102.6k times · Source

What is the difference between

@model.destroy and @model.delete

For example:

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

Does it really matter if I use the one or the other?

Answer

user740584 picture user740584 · Mar 31, 2014

Basically destroy runs any callbacks on the model while delete doesn't.

From the Rails API:

  • ActiveRecord::Persistence.delete

    Deletes the record in the database and freezes this instance to reflect that no changes should be made (since they can't be persisted). Returns the frozen instance.

    The row is simply removed with an SQL DELETE statement on the record's primary key, and no callbacks are executed.

    To enforce the object's before_destroy and after_destroy callbacks or any :dependent association options, use #destroy.

  • ActiveRecord::Persistence.destroy

    Deletes the record in the database and freezes this instance to reflect that no changes should be made (since they can't be persisted).

    There's a series of callbacks associated with destroy. If the before_destroy callback return false the action is cancelled and destroy returns false. See ActiveRecord::Callbacks for further details.