如何删除一个ActiveRecord对象?

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

按id删除, 删除当前对象: 可以根据where子句进行删除吗?


当前回答

User.destroy

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

has_many :addresses, :dependent => :destroy

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

User.destroy, User.delete User.destroy_all(<条件>)或User.delete_all(<条件>)

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

其他回答

有delete、delete_all、destroy和destroy_all。

文档是:旧文档和Rails 3.0.0文档

Delete不会实例化对象,而destroy会。一般来说,删除比销毁快。

User.destroy

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

has_many :addresses, :dependent => :destroy

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

User.destroy, User.delete User.destroy_all(<条件>)或User.delete_all(<条件>)

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

这是毁灭和毁灭所有的方法

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(条件:'value')将允许您删除记录 没有主键

注意:从@hammady的评论中,如果User model没有主键,User .destroy将不起作用。

注2:从@pavel-chuchuva的评论来看,带条件的destroy_all和带条件的delete_all在Rails 5.1中已经弃用了——参见guides.rubyonrails.org/5_1_release_notes.html

如果您使用的是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获取记录集,然后删除或销毁它。