360

如何删除 ActiveRecord 对象?

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

  1. 删除id

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

  3. 您可以根据where子句删除吗?

4

5 回答 5

618

destroydestroy_all方法,比如

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

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

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

注意:来自@hammady 的评论,user.destroy如果用户模型没有主键,则不会工作。

注 2:来自@pavel-chuchuva 的评论,Rails 5.1 中已弃用destroy_allwith conditions 和with conditions - 请参阅 guides.rubyonrails.org/5_1_release_notes.htmldelete_all

于 2010-11-14T13:41:50.410 回答
67

deletedelete_alldestroydestroy_all

文档是:旧文档Rails 3.0.0 文档

delete不会实例化对象,而destroy会。一般来说,delete比 快destroy

于 2010-11-14T13:50:03.013 回答
50
  1. User.destroy

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

has_many :addresses, :dependent => :destroy

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

  1. User.destroy,User.delete

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

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

于 2010-11-14T13:48:27.833 回答
1

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

于 2020-06-25T09:21:53.783 回答
-1

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

于 2021-04-19T17:17:52.527 回答