我的数据库上有一个列名“密码”某个密码有感叹号(!)字符如何使用rake更改带有美元符号(!
)的感叹号($
)字符任务?
到目前为止,这是我的代码:
namespace :update_db do
desc "Change ! Character to $"
User.where(password: '!').each do |t|
t.password
end
end
end
答案 0 :(得分:3)
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