Вы можете воспроизвести проблему следующим образом:Attr_encrypted порядок атрибутов в ActiveRecord
git clone -b args_order git://github.com/danpal/attr_encrypted.git
cd attr_encrypted/
rake test
1) Error:
test_should_create_an_account_regardless_of_arguments_order(ActiveRecordTest):
ArgumentError: must specify a :key
Вот что тест:
def test_should_create_an_account_regardless_of_arguments_order
Account.create!(:key => "secret", :password => "password")
Account.create!(:password => "password" , :key => "secret")
end
проблема в том, что атрибуты устанавливаются слева -> правый и: пароль зависит от: key, поэтому, когда: пароль до: ключ, ключ равен нулю.
Вот почему это зависит:
class Account < ActiveRecord::Base
attr_accessor :key
attr_encrypted :password, :key => Proc.new {|account| account.key}
end
так, если account.key не установлен перед: пароль установлен вещи ломаются.
Сейчас я шифровать значение каждый раз, когда значение атрибута, который должен быть зашифрован установлено:
define_method("#{attribute}=") do |value|
.....
send("#{encrypted_attribute_name}=", encrypt(attribute, value)) <---HERE GETS ENCRYPTED
instance_variable_set("@#{attribute}", value)
end
Я думал, может быть, просто зашифровать атрибут при сохранении в базу данных, но проблема заключается в том, что может быть много зашифрованных атрибутов, а также некоторые люди могут использовать зашифрованный атрибут до сохранения . Что я могу сделать, чтобы предотвратить это? кто-нибудь хочет добавить запрос на тягу ???
Я столкнулся с этой же проблемой. Вы когда-нибудь разрешали? – maletor