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

时间:2017-04-21 07:02:10

标签: ruby-on-rails ruby rake rake-task

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

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

namespace :update_db do
  desc "Change ! Character to $"
    User.where(password: '!').each do |t|
      t.password 
    end
  end
end

1 个答案:

答案 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