5

Ho un modello di amministrazione molto di base:validates_confirmation_of: la password non viene innescato

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

According to the manualhas_secure_password aggiunge anche una validates_confirmation_of :password. Se sono corretto, l'errore validates_confirmation_of dovrebbe sempre essere visualizzato se :password e :password_confirmation non corrispondono, anche se :password_confirmation è nil.

sto testando con RSpec e questo test ha esito negativo e mi dice che adminè valida:

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

Questo si passa:

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

Quindi, cosa diavolo sto facendo sbagliato?

+0

Nel primo caso, qual è il valore di 'admin.password_confirmation' dopo aver impostato la password su' 'secret''? – Dogbert

+0

'admin.password_confirmation' è' nil'. – Wukerplank

risposta

5

Ecco il codice per 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 

Come si può vedere non è mai garantisce che una conferma della password viene inviata. Potresti aggiungerlo tu stesso, e fintanto che avrai il campo modulo sulla tua pagina, una stringa vuota verrà inviata se non è disponibile.

+2

Giusto, dovrei avere RTFM: "Questo controllo viene eseguito solo se' password_confirmation' non è 'nil', e di default solo su save." (Http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of) – Wukerplank