我想从我的数据库中加密一些表的一些字段。如果我将encrypts :'field_name'添加到模型类中,它将不会加密已经添加到数据库中的数据。我想我必须写一个迁移来完成这个任务。我应该使用哪些方法或Rails模块?我在Rails指南中的加密中找不到它。- 谢谢-谢谢我试着阅读Rails指南和文档,但没有帮助。
encrypts :'field_name'
lnxxn5zx1#
将新列添加到模型的数据库表中,并配置模型以加密该新列。
# in a migration add_column :model_name, :attribute_name_new, :string # in the model encrypts :attribute_name_new
字符串设置好后,将数据从旧列复制到新的加密列:
# in a Rake task or simply in the Rails console: ModelName.find_each do |record| record.update(attribute_name_new: record.attribute_name) end
型最后一步,删除旧列并将新列重命名为原始属性名称。
# in a migration remove_column :model_name, :attribute_name rename_column :model_name, :attribute_name_new, :attribute_name
型根据数据库表的大小以及运行这些步骤时是否可以短暂停机,您可能需要或不需要对模型进行额外更改,以使两列在更长的时间内保持同步。
1条答案
按热度按时间lnxxn5zx1#
将新列添加到模型的数据库表中,并配置模型以加密该新列。
字符串
设置好后,将数据从旧列复制到新的加密列:
型
最后一步,删除旧列并将新列重命名为原始属性名称。
型
根据数据库表的大小以及运行这些步骤时是否可以短暂停机,您可能需要或不需要对模型进行额外更改,以使两列在更长的时间内保持同步。