3
您可以重現該問題如下:Attr_encrypted爲了
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
問題是屬性組的左 - >右:密碼取決於:鍵所以當:密碼是之前:鍵,鍵是零。
這是爲什麼這取決於:
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 2012-04-15 05:43:54