Я использую attr_encrypted
(v 1.2.0) в RoR 3.0.5 для шифрования учетных данных, которые я не хочу отображать в виде простого текста в моей БД. Когда я обновляю зашифрованное поле, кажется, что оно не сохраняется в БД.
Моя модель по существу:
class Service << ActiveRecord::Base
attr_encrypted :credentials_aux, :key => KEY, :attribute => 'encrypted_credentials', :encode => true, :marshal => true
def credentials
credentials_aux
end
def credentials=(c)
h = {}.update(c) # coerce HashWithIndifferentAccess to a vanilla hash
credentials_aux = h
end
...
end
(Обратите внимание, что метод 'credentials =' существует просто для того, чтобы сгенерировать Rails-сгенерированный HashWithIndifferentAccess в ванильный хеш. Он также дает мне место для вставки отладочной распечатки для проверки моих данных.)
Но когда я пытаюсь обновить учетные данные через консоль, это не займет:
>> s = Service.find(19)
=> #<Service id: 19, encrypted_credentials: "10VfHU7IkdrFb4Q6Hj18YtY81rbRp3sIuoVUl8CHNj88cq1XFo2...",>
>> s.credentials
=> {"user_id"=>"fred.flintstone", "password"=>"supersecret"}
>> s.credentials = {"user_id" => "barney.rubble", "password" => "notsosecret"}
=> {"user_id" => "barney.rubble", "password" => "notsosecret"}
>> s.credentials
=> {"user_id"=>"fred.flintstone", "password"=>"supersecret"}
Почему s.credentials
не обновился до нового значения?