我写了以下函数,但看起来太慢了。 它需要随每条记录更新。
如何只用一个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
)
答案 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()
]
}
]