5

Ben çok temel bir Yönetici modeli var tetikleyen almaz:validates_confirmation_of: şifre

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

According to the manualhas_secure_password ayrıca validates_confirmation_of :password ekler. validates_confirmation_of doğruysa, her zamanve ve eşleşmiyorsa hata vermem gerekir.

Ben RSpec ile test ediyorum ve bu test başarısız olur ve admin geçerli olduğunu söylüyor: ne halt yapıyorum Yani

admin = Admin.new 
admin.email = '[email protected]' 
admin.password = 'secret' 
admin.password_confirmation = '' 
admin.should be_invalid 

:

admin = Admin.new 
admin.email = '[email protected]' 
admin.password = 'secret' 
admin.should be_invalid 

Bu bir geçer yanlış?

+0

İlk durumda, '' secret' 'parola ayarlandıktan sonra 'admin.password_confirmation' değeri nedir? – Dogbert

+0

"admin.password_confirmation", "nil". – Wukerplank

cevap

5

İşte has_secure_password için kod:

# 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 

bunu asla bir parola onayı gönderilmesini sağlar görebileceğiniz gibi. Ancak bunu kendiniz ekleyebilirsiniz ve sayfanızdaki form alanına sahip olduğunuz sürece doldurulmamışsa boş bir dize gönderilecektir.

+2

Doğru, RTFM'ye sahip olmalıyım: "Bu kontrol yalnızca" password_confirmation "," nil "değilse ve varsayılan olarak yalnızca kaydetme durumunda yapılır." (Http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of) – Wukerplank