如何删除一个ActiveRecord对象?
我看了活动记录查询,它没有任何关于删除,我可以看到。
删除id,
id
像这样删除当前对象:
可以基于where子句进行删除吗?
where
它是destroy和destroy_all方法,比如
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回调或任何依赖关联选项。
delete
delete_all
:before_destroy
:after_destroy
User.delete_all(condition: 'value')允许你删除记录 没有主键
User.delete_all(condition: 'value')
请注意:根据@hammady的评论,如果用户模型没有主键,user.destroy将不起作用。
user.destroy
注2:根据@pavel-chuchuva的评论,destroy_all带条件和delete_all带条件在Rails 5.1中已弃用-请参阅guides.rubyonrails.org/5_1_release_notes.html
User.destroy
User.destroy(1)将在发生id == 1和:before_destroy和:after_destroy回调时删除用户。例如,如果您有关联的记录
User.destroy(1)
id == 1
has_many :addresses, :dependent => :destroy
User.destroy, User.delete
User.delete
User.destroy_all(<conditions>)或User.delete_all(<conditions>)
User.destroy_all(<conditions>)
User.delete_all(<conditions>)
请注意: User是一个类,User是一个实例对象
有delete, delete_all, destroy和destroy_all。
文档是:旧的文档和Rails 3.0.0文档
delete不实例化对象,而destroy可以。通常,delete比destroy快。
如果您使用的是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获取记录集,然后删除或销毁它。