rails 3.0 attr_encrypted существующая база данных - PullRequest
4 голосов
/ 13 июня 2011

В rails 3.0 мне нужно зашифровать существующее текстовое поле.Есть таблица заметок, которая содержит текстовое поле «заметка».Я создал поле encrypted_note и добавил в модель:

attr_encrypted :note, :key => 'a secret key'

На данный момент, когда я загружаю существующую запись, «заметка» пуста.Я предполагаю, что attr_encrypted пытается расшифровать ... но поле еще не было зашифровано, но!

Ответы [ 3 ]

2 голосов
/ 17 июня 2011

Вот трюк, чтобы очистить незашифрованный столбец при заполнении зашифрованного!в модель добавить:

before_update :clear_note

def clear_note
   if encrypted_note != nil && read_attribute('note') != nil
     write_attribute('note','')
   end
end
2 голосов
/ 13 июня 2011

Работает ли instance_variable_get('@note') или read_attribute('note')?

Если это так, вы, вероятно, можете сделать что-то подобное в консоли Rails:

User.all.each do |user|
  user.note = user.instance_variable_get('@note')
  user.save
end
1 голос
/ 12 января 2016

Предполагается, что вы начинаете с вашей модели Thing с незашифрованным атрибутом note.

1) Добавьте миграцию, добавьте поле encrypted_note и заполните его

  class EncryptThing < ActiveRecord::Migration
    def up
      rename_column :things, :note, :old_note
      add_column :things, :encrypted_note, :string
      # if you want to use per-attribute iv and salt:
      # add_column :things, :encrypted_note_iv, :string
      # add_column :things, :encrypted_note_salt, :string

      Thing.find_each do |t|
        t.note = t.old_note
        t.save
      end

      remove_column :things, :old_note
    end

    def down
      raise ActiveRecord::IrreversibleMigration
    end
  end

2) Добавьте строку в вашу модель, чтобы указать зашифрованный атрибут:

    attr_encrypted :note, :key => Rails.application.config.key
    # if you want to use per-attribute iv and salt, add this to the line above:
    #   ,  :mode => :per_attribute_iv_and_salt

3) запустите миграцию

    rake db:migrate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...