Rails:rake 任务更改数据库中的列值

Rails: rake task change column values in database

我的数据库上有一个列名 "password" 一些密码有感叹号 (!) 字符 我如何更改带有美元符号的感叹号 (!) 字符 ($) 使用 rake 任务?

到目前为止,这是我的代码:

namespace :update_db do
  desc "Change ! Character to $"
    User.where(password: '!').each do |t|
      t.password 
    end
  end
end
namespace :update_db do
  desc "Change ! Character to $"
    User.where('password LIKE ?', "%!%").find_each do |t|
      t.update(password: t.password.gsub('!', '$'))
    end
  end
end

上述解决方案将触发一个条件查询和每个更新用户一个查询。

如果您有很多用户,您可以使用单个查询来更新部分(使用 REGEXP_REPLACE):

User.update_all("password = REGEXP_REPLACE(password, '!', '&', 'g')")

P.S。将密码存储为纯文本并不是最好的主意。 In fact, it's very bad idea.