如何删除 ActiveRecord 对象?
我查看了Active Record Querying,它没有任何我可以看到的删除内容。
删除
id
,删除当前对象,如:
user.remove
,您可以根据
where
子句删除吗?
如何删除 ActiveRecord 对象?
我查看了Active Record Querying,它没有任何我可以看到的删除内容。
删除id
,
删除当前对象,如:user.remove
,
您可以根据where
子句删除吗?
它destroy
和destroy_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_all
with conditions 和with conditions - 请参阅 guides.rubyonrails.org/5_1_release_notes.htmldelete_all
有delete
、delete_all
、destroy
和destroy_all
。
文档是:旧文档和Rails 3.0.0 文档
delete
不会实例化对象,而destroy
会。一般来说,delete
比 快destroy
。
User.destroy
User.destroy(1)
将使用and删除用户,id == 1
并发生回调。例如,如果您有关联的记录:before_destroy
:after_destroy
has_many :addresses, :dependent => :destroy
用户被销毁后,他的地址也将被销毁。如果您改用删除操作,则不会发生回调。
User.destroy
,User.delete
User.destroy_all(<conditions>)
或者User.delete_all(<conditions>)
注意:用户是一个类,用户是一个实例对象
如果您使用的是 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 获取记录集,然后删除或销毁它。