如何删除一个ActiveRecord对象?

如何删除一个ActiveRecord对象?

我看了活动记录查询,它没有任何关于删除,我可以看到。

  1. 删除id

  2. 像这样删除当前对象:

  3. 可以基于where子句进行删除吗?

375994 次浏览

它是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. User.destroy

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

has_many :addresses, :dependent => :destroy
用户被销毁后,他的地址也将被销毁。 如果使用delete操作,则不会发生回调
  1. User.destroy, User.delete

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

请注意: User是一个类,User是一个实例对象

deletedelete_alldestroydestroy_all

文档是:旧的文档Rails 3.0.0文档

delete不实例化对象,而destroy可以。通常,deletedestroy快。

如果您使用的是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

从一个特定的表中删除一行或从一个表中删除一个记录集是非常简单的,从您的控制台中,您所需要做的就是通过其Id获取记录集,然后删除或销毁它。