将生产数据库中的旧值更新为新值

时间:2015-11-09 13:24:45

标签: ruby-on-rails attr-encrypted

我使用attr_encrypted gem添加加密。基本上我所要做的就是添加gem,并在添加行之前将我的列重命名为encrypted_column前缀:

  attr_encrypted :reply, key: ENV["ANSWER_CRYPT_KEY"]

到我的模特。现在这一切都运行良好,但是我已准备好将其推向生产,并且会有一些问题,因为那里的值没有加密 - 是否有一个命令我可以在我的rails c中运行以循环它们并加密它们?

2 个答案:

答案 0 :(得分:0)

我建议您通过将reply列重命名为old_reply来完成中间步骤。您可以运行迁移来执行此操作:

def up
  rename_column :your_table, :reply, :old_reply

  Model.reset_column_information
  Model.find_each do |instance|
    model.reply = model.old_reply #this will set the encrypted_reply based on attr_encrypted
    model.save!
  end
end

确定已设置所有加密值后,您可以运行其他迁移以删除old_reply

答案 1 :(得分:0)

您也不需要重命名数据库中的列;相反,您可以使用:attribute gem的attr_encrypted选项。 作为参考,您可以查看其文档here