5

をパスワードをトリガしません。私が正しい場合、validates_confirmation_ofは、:password:password_confirmationが一致しない場合、たとえ:password_confirmationnilであっても、常にエラーが発生するはずです。validates_confirmation_of:私は非常に基本的な管理モデルを持っている

私はRSpecのでのテストだし、このテストは失敗し、admin有効であることを私に語った:私は一体何をやっている、だから、

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 

この1が経過します違う?ここで

+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 

あなたはそれがパスワードの確認が送信されることを保証しません見ることができるように。あなたはそれ自身を追加することができます。ページ上にフォームフィールドがある限り、空でない場合は空の文字列が送信されます。

+2

そうですね、私はRTFMを持っているべきです:「このチェックは 'password_confirmation'が' nil'でなく、デフォルトで保存時にのみ実行されます。 (http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of) – Wukerplank

関連する問題