对某个 model 记录进行遍历,找出其中不符合要求的记录删掉,例如:
Product.all.each do |p| if something p.destroy end end
问题是这样的写法是否安全?destroy 记录以后会不会对以后的循环遍历产生影响?如果有危险该怎样处理才安全?
我想错题目了...
额 Product.delete_all("something = something") 就可以了呀,不用循环的
#2 楼 @huacnlee 多谢,activerecord 的一些基本用法还是不熟啊,都是用起来再找
如果不是删除,且数据多的话,不要直接 All.each, 用 find_each https://github.com/rails/rails/blob/9066e3402548d365dc7cf2abda8e7cd64370675c/activerecord/lib/active_record/relation/batches.rb#L19
#4 楼 @_samqiu good point.
怕删错的时候,脚本的话,我会 print 出来,然后贴到相关 Ticket 的记录里。或者 transaction+log 到一个表里。
使用 Product.delete_all 不会执行 callback
Product.delete_all
#7 楼 @zhangyuan 那就用 destroy_all
如果要遍历,请使用 find_each 方法,这样才安全