Kev*_*ker 0 activerecord ruby-on-rails
我需要更新大量记录中的单个字段.通常,我只是从控制台运行快速SQL更新语句并完成它,但这是一个最终用户需要能够在此应用程序中运行的实用程序.
所以,这是我的代码:
users = User.find(:all, :select => 'id, flag')
users.each do |u|
u.flag = false
u.save
end
Run Code Online (Sandbox Code Playgroud)
我担心随着用户数量的增加,这只需要一段时间(目前大约在35k左右,每周增加2-5k).有更快的方法吗?
谢谢!
如果您真的想要更新所有记录,最简单的方法是使用#update_all:
User.update_all(:flag => false)
Run Code Online (Sandbox Code Playgroud)
这相当于:
UPDATE users SET flag = 'f'
Run Code Online (Sandbox Code Playgroud)
(确切的SQL将根据您的适配器而有所不同)
#update_all方法也接受条件:
User.update_all({:flag => false}, {:created_on => 3.weeks.ago .. 5.hours.ago})
Run Code Online (Sandbox Code Playgroud)
此外,#update_all可以与命名范围组合:
class User < ActiveRecord::Base
named_scope :inactive, lambda {{:conditions => {:last_login_at => 2.years.ago .. 2.weeks.ago}}
end
User.inactive.update_all(:flag => false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |