5

我有一个非常基本的管理员模型:

class Admin < ActiveRecord::Base
  has_secure_password
  validates_uniqueness_of :email
  attr_accessible :email, :password, :password_confirmation
end

根据手册 has_secure_password还添加了一个validates_confirmation_of :password. 如果我是正确的,如果和不匹配validates_confirmation_of应该总是出错- 即使是.:password:password_confirmation:password_confirmationnil

我正在使用 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

那么,我到底做错了什么?

4

1 回答 1

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

如您所见,它永远不会确保发送密码确认。但是,您可以自己添加,只要您的页面上有表单字段,如果未填写,就会发送一个空字符串。

于 2011-09-24T12:01:35.337 回答