Rails更新不同数据中的多个列

时间:2017-11-09 08:10:42

标签: ruby-on-rails ruby activerecord

我写了以下函数,但看起来太慢了。 它需要随每条记录更新。

如何只用一个update来改善这一点?

User.where('email like (?)', '%@xxxxx.com').each do |u|
  pwd = BCrypt::Password.create(u.account)
  u.update_columns(encrypted_password: pwd)
end

更新

我的目标是我需要更新一些与其帐户相同的用户密码。

他们的某些account太短,所以我先加密,然后更新他们的列encrypted_password。 (我使用的是宝石devise

2 个答案:

答案 0 :(得分:0)

在设计中你可以直接传递密码param,设计gem自动加密。

User.where('email like (?)', '%@xxxxx.com').each do |u|
  u.update_attributes(password: u.account)
end

答案 1 :(得分:0)

当您需要访问特定记录并在该记录上获取属性时,您可以考虑使用ActiveRecord/Transactions

我尝试重新创建一个基准测试,在没有ActiveRecord :: Base.transaction的情况下更新5000个用户,并在迭代10次后使用pluck和select:

[
  {
    id: 'COMPUTER-A1',
    number: '948004830011',
    computers: [
      // whatever data you return from getComputers()
    ]
  },
  {
    id: 'COMPUTER-A2',
    number: '948004830011',
    computers: [
      // whatever data you return from getComputers()
    ]
  }
]