5

मैं एक बहुत ही बुनियादी व्यवस्थापक मॉडल है:validates_confirmation_of: पासवर्ड शुरू हो रहा है नहीं मिल

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

According to the manualhas_secure_password भी एक validates_confirmation_of :password कहते हैं। यदि मैं सही हूं validates_confirmation_of हमेशा 0 त्रुटि होना चाहिए यदि :password और :password_confirmation मेल नहीं खाते - भले ही :password_confirmationnil है।

मैं RSpec के साथ परीक्षण कर रहा हूँ और इस परीक्षण विफल रहता है और मुझसे कहता है कि admin मान्य है:

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

यह एक गुजरता है:

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

तो, मैं क्या बिल्ली कर रहा हूँ गलत?

+0

पहले मामले में, 'secret' पर पासवर्ड सेट करने के बाद 'admin.password_confirmation' का मान क्या है? – Dogbert

+0

'admin.password_confirmation'' nil' है। – Wukerplank

उत्तर

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 

आप देख सकते हैं यह कभी नहीं सुनिश्चित करता है कि एक पासवर्ड पुष्टिकरण भेजा जाता है। हालांकि आप इसे स्वयं जोड़ सकते हैं, और जब तक आपके पृष्ठ पर फॉर्म फ़ील्ड हो, तब तक खाली स्ट्रिंग भेजी जाएगी यदि यह unfilled है।

+2

ठीक है, मेरे पास आरटीएफएम होना चाहिए: "यह चेक तभी किया जाता है जब' password_confirmation' 'nil' न हो, और डिफ़ॉल्ट रूप से केवल सहेजने पर।" (Http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of) – Wukerplank

संबंधित मुद्दे