Обновление существующих незашифрованных записей с помощью attr_encrypted - PullRequest
0 голосов
/ 28 августа 2018

Как обновить существующие записи, которые ранее не были зашифрованы с помощью gem attr_encrypted.

В настоящее время у меня есть столбец text в таблице с именем AppointmentNote, которая является просто строкой. Теперь я хочу иметь столбец с именем 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")

Спасибо

1 Ответ

0 голосов
/ 28 августа 2018

Вы должны иметь возможность просто обновить их все с сохранением. Что-то вроде:

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, если у вас есть тонны записей. Цель здесь - перебрать их.

...