ruby遍历sql结果

时间:2015-06-02 20:51:34

标签: sql ruby-on-rails ruby

我需要遍历使用sql找到的记录并更新所有记录。

我需要更新几千条记录,并且要求很复杂,我通过SQL搜索记录。下面的代码有效,但有没有办法在不执行数千个更新语句的情况下完成它?

users = User.find_by_sql "select e.id from users e inner join accounts a on a.id = e.account_id where e.account_id not in (1955,3083, 3869)"
users.each do |user|
  u = User.find(user.id)
  if u
    u.update_attribute(:last_name, 'X')
  end
end

1 个答案:

答案 0 :(得分:2)

这与您的代码完全相同,但只有一个UPDATE

User.joins(:accounts)
  .where("users.account_id NOT IN (?)", [1955, 3083, 3869])
  .update_all(last_name: "X")

您可以找到update_all here的文档。