5

私は非常に基本的な管理モデルを持っています:

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

マニュアルによると has_secure_passwordvalidates_confirmation_of :password. 私が正しければ、 ifとdo notvalidates_confirmation_ofは常にエラーになるはずです- たとえisであっても。:password:password_confirmation:password_confirmationnil

私はRSpecでテストしていますが、このテストは失敗し、有効であることがわかりadmin ます:

admin = Admin.new
admin.email = 'test@example.info'
admin.password = 'secret'
admin.should be_invalid

これは合格します:

admin = Admin.new
admin.email = 'test@example.info'
admin.password = 'secret'
admin.password_confirmation = ''
admin.should be_invalid

それで、私は一体何を間違っているのですか?

4

1 に答える 1

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

ご覧のとおり、パスワード確認が送信されることは決してありません。ただし、それを自分で追加することもできます。ページにフォーム フィールドがある限り、入力されていない場合は空の文字列が送信されます。

于 2011-09-24T12:01:35.337 に答える