validates_confirmation_of: пароль не срабатывает - PullRequest
5 голосов
/ 24 сентября 2011

У меня есть очень простая модель администратора:

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_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

Итак, какого чёрта я делаю не так?

1 Ответ

5 голосов
/ 24 сентября 2011

Вот код для 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

Как видите, он никогда не гарантирует отправку подтверждения пароля.Однако вы можете добавить это самостоятельно, и, если у вас есть поле формы на вашей странице, пустая строка будет отправлена, если она не заполнена.

...