如何删除一个ActiveRecord对象?
我看了活动记录查询,它没有任何删除,我可以看到。
按id删除, 删除当前对象: 可以根据where子句进行删除吗?
如何删除一个ActiveRecord对象?
我看了活动记录查询,它没有任何删除,我可以看到。
按id删除, 删除当前对象: 可以根据where子句进行删除吗?
这是毁灭和毁灭所有的方法
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
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会。一般来说,删除比销毁快。
如果您使用的是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