你如何删除ActiveRecord对象?

时间:2010-11-14 13:34:26

标签: ruby-on-rails rails-activerecord

如何删除ActiveRecord对象?

我查看了Active Record Querying,它没有任何关于我可以看到的删除内容。

  1. id删除,

  2. 删除当前对象,如:user.remove

  3. 您可以根据where条款删除吗?

5 个答案:

答案 0 :(得分:531)

这是destroydestroy_all方法,例如

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

或者,您可以使用deletedelete_all来强制执行:before_destroy:after_destroy回调或任何相关关联选项。

  

User.delete_all(condition: 'value')将允许您删除记录   没有主键

注意:来自@ hammady的评论,如果用户模型没有主键,则user.destroy将无效。

注意2 :来自@ pavel-chuchuva的评论,条件destroy_all和条件delete_all已在Rails 5.1中弃用 - 请参阅guides.rubyonrails.org/5_1_release_notes .html

答案 1 :(得分:58)

deletedelete_alldestroydestroy_all

文档为:older docsRails 3.0.0 docs

delete不会实例化对象,而destroy会对象进行实例化。通常,deletedestroy快。

答案 2 :(得分:45)

  1. User.destroy
  2. User.destroy(1)将删除id == 1的用户,并发生:before_destroy:after_destroy次回调。例如,如果您有相关记录

    has_many :addresses, :dependent => :destroy
    

    用户被销毁后,他的地址也将被销毁。 如果您使用删除操作,则不会发生回调。

    1. User.destroyUser.delete

    2. User.destroy_all(<conditions>)User.delete_all(<conditions>)

    3. 注意:用户是一个类,用户是一个实例对象

答案 3 :(得分:0)

如果您使用的是Rails 5及更高版本,则以下解决方案将起作用。

#delete based on id
user_id = 50
User.find(id: user_id).delete_all

#delete based on condition
threshold_age = 20
User.where(age: threshold_age).delete_all

https://www.rubydoc.info/docs/rails/ActiveRecord%2FNullRelation:delete_all

答案 4 :(得分:0)

从特定表中删除行或从表中删除记录集非常简单,您只需从控制台获取记录集的 ID,然后删除或销毁它。