5

Tôi có một mô hình quản lý rất cơ bản:validates_confirmation_of: mật khẩu không được kích hoạt

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

According to the manualhas_secure_password cũng cho biết thêm một validates_confirmation_of :password. Nếu tôi chính xác, validates_confirmation_of phải luôn luôn lỗi nếu :password:password_confirmation không khớp - ngay cả khi :password_confirmationnil.

Tôi đang thử nghiệm với RSpec và thử nghiệm này không thành công và nói với tôi rằng admin hợp lệ:

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

một này đi:

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

Vì vậy, những gì heck tôi làm sai rồi?

+0

Trong trường hợp đầu tiên, giá trị của 'admin.password_confirmation' là gì sau khi đặt mật khẩu thành' 'secret''? – Dogbert

+0

'admin.password_confirmation' là' nil'. – Wukerplank

Trả lời

5

Dưới đây là các mã cho 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 

Như bạn có thể thấy nó không bao giờ đảm bảo rằng một xác nhận mật khẩu được gửi đi. Tuy nhiên, bạn có thể tự thêm mình và miễn là bạn có trường biểu mẫu trên trang của mình, một chuỗi trống sẽ được gửi nếu nó không được điền.

+2

Phải, tôi nên có RTFM: "Kiểm tra này chỉ được thực hiện nếu' password_confirmation' không phải là 'nil' và theo mặc định chỉ khi lưu." (http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of) – Wukerplank

Các vấn đề liên quan