使用attr_encrypted

时间:2018-08-28 02:23:34

标签: ruby-on-rails ruby postgresql ruby-on-rails-5 attr-encrypted

如何更新以前用attr_encrypted宝石解密的现有记录。

我目前在名为text的表中有AppointmentNote列,它只是一个字符串。现在,我想有一个名为note的列,该列已加密(使用attr_encrypted)。

我已经添加了列

encrypted_note encrypted_note_iv

当我AppointmentNote.create(note: "blah")正确加密时,此方法效果很好,并且该记录上的任何进一步更新都很好。

问题在于迁移之前创建的记录。如何将所有数据从列text迁移到新的加密列encrypted_noteencrypted_note_iv

这是模型

class AppointmentNote < ApplicationRecord
  attr_encrypted_options.merge!(encode: true)
  attr_encrypted :note, key: SOME_KEY
  ...
end

如果我做了我认为显而易见的解决方案,那就是简单地回滚 AppointmentNote.first.update(note: "rawr")

谢谢

1 个答案:

答案 0 :(得分:0)

您应该可以保存所有更新。像这样:

rails g migration update_apartment_notes_note_for_encryption

打开该生成的文件。

def change
  AppointmentNote.find_each do |apartment_note|
    apartment_note.save 
  end
end

rake db:migrate

注意:如果您有大量记录,则使用find_each比all更为明智。这里的目标是迭代它们。