使用 attr_encrypted 更新现有的未加密记录
Updating existing unencrypted records with attr_encrypted
如何更新以前使用 gem attr_encrypted.
未加密的现有记录
我目前在名为 AppointmentNote
的 table 中有列 text
,它只是一个字符串。我现在想要一个名为 note
的列,该列已加密(使用 attr_encrypted)。
我已经添加了列
encrypted_note
encrypted_note_iv
当我这样做时效果很好 AppointmentNote.create(note: "blah")
它正确加密,并且对该记录的任何进一步更新都很好。
问题出在迁移前创建的记录上。我如何将列 text
中的所有数据迁移到新的加密列 encrypted_note
和 encrypted_note_iv
这是模型
class AppointmentNote < ApplicationRecord
attr_encrypted_options.merge!(encode: true)
attr_encrypted :note, key: SOME_KEY
...
end
如果我按照我的想法去做,最明显的解决方案就是简单地回滚
AppointmentNote.first.update(note: "rawr")
谢谢
您应该可以通过保存更新它们。类似于:
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
更明智。这里的目标是迭代它们。
如何更新以前使用 gem attr_encrypted.
未加密的现有记录我目前在名为 AppointmentNote
的 table 中有列 text
,它只是一个字符串。我现在想要一个名为 note
的列,该列已加密(使用 attr_encrypted)。
我已经添加了列
encrypted_note
encrypted_note_iv
当我这样做时效果很好 AppointmentNote.create(note: "blah")
它正确加密,并且对该记录的任何进一步更新都很好。
问题出在迁移前创建的记录上。我如何将列 text
中的所有数据迁移到新的加密列 encrypted_note
和 encrypted_note_iv
这是模型
class AppointmentNote < ApplicationRecord
attr_encrypted_options.merge!(encode: true)
attr_encrypted :note, key: SOME_KEY
...
end
如果我按照我的想法去做,最明显的解决方案就是简单地回滚
AppointmentNote.first.update(note: "rawr")
谢谢
您应该可以通过保存更新它们。类似于:
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
更明智。这里的目标是迭代它们。