ruby-on-railsrails-activerecord

How do you delete an ActiveRecord object?


How do you delete an ActiveRecord object?

I looked at Active Record Querying and it does not have anything on deleting that I can see.

  1. Delete by id,

  2. Delete the current object like: user.remove,

  3. Can you delete based on a where clause?


Solution

  • It's destroy and destroy_all methods, like

    user.destroy
    User.find(15).destroy
    User.destroy(15)
    User.where(age: 20).destroy_all
    User.destroy_all(age: 20)
    

    Alternatively you can use delete and delete_all which won't enforce :before_destroy and :after_destroy callbacks or any dependent association options.

    User.delete_all(condition: 'value') will allow you to delete records without a primary key

    Note: from @hammady's comment, user.destroy won't work if User model has no primary key.

    Note 2: From @pavel-chuchuva's comment, destroy_all with conditions and delete_all with conditions has been deprecated in Rails 5.1 - see guides.rubyonrails.org/5_1_release_notes.html