我有一个非常基本的管理模型:
class Admin < ActiveRecord::Base
has_secure_password
validates_uniqueness_of :email
attr_accessible :email, :password, :password_confirmation
end
According to the manual has_secure_password
还会添加validates_confirmation_of :password
。如果我是正确的validates_confirmation_of
,如果:password
与:password_confirmation
不匹配,则应始终出错 - 即使:password_confirmation
为nil
。
我正在使用RSpec进行测试,此测试失败并告诉我admin
有效:
admin = Admin.new
admin.email = 'test@example.info'
admin.password = 'secret'
admin.should be_invalid
这个通过:
admin = Admin.new
admin.email = 'test@example.info'
admin.password = 'secret'
admin.password_confirmation = ''
admin.should be_invalid
那么,我到底做错了什么?
答案 0 :(得分:5)
以下是has_secure_password
的代码:
# File activemodel/lib/active_model/secure_password.rb, line 32
def has_secure_password
attr_reader :password
validates_confirmation_of :password
validates_presence_of :password_digest
include InstanceMethodsOnActivation
if respond_to?(:attributes_protected_by_default)
def self.attributes_protected_by_default
super + ['password_digest']
end
end
end
正如您所看到的,它永远不会确保发送密码确认。但是,您可以自己添加,只要您的页面上有表单字段,如果未填充,则会发送一个空字符串。