Как отключить проверку пароля/подтверждения при использовании has_secure_password в Rails 3.2?
У меня есть пользовательская модель, настроенная как таковая:
class User < ActiveRecord::Base
has_secure_password
# callbacks -------------------------------------------------------------------------
before_create { generate_token(:auth_token) }
# setup accessible (or protected) attributes for your model and validation ----------
attr_accessible :email, :password, :password_confirmation
# validations
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email , presence: true,
uniqueness: { case_sensitive: false },
format: { with: VALID_EMAIL_REGEX }
validates :password , length: { minimum: 6 }
validates :password_confirmation, presence: true
Но я не хочу, чтобы проверки пароля и/или пароля были подтверждены при обновлении пользователя, если пользователь не пытается изменить свой пароль.
Итак, если пользователь обновляет свою информацию в форме без указания пароля и/или подтверждения, он должен быть успешным. Если пользователь обновляет свою информацию и включает в себя пароль и/или подтверждение, проверки должны выполняться.
Каков наилучший способ для этого?
Ответы
Ответ 1
Вы можете добавить условный :if
для обоих валидаторов:
Вариант 1:
validates :password , length: { minimum: 6 }, :if => :validate_password?
validates :password_confirmation, presence: true , :if => :validate_password?
def validate_password?
password.present? || password_confirmation.present?
end
Вариант 2:
Или используйте метод проверки, перемещая проверки проверки в метод вместо отдельных вызовов validates
:
validate :check_password, :on => :update
def check_password
return unless password.present? || password_confirmation.present?
..validations for both attributes here..
..check presence, length etc. as required and add to the errors variable as necessary..
end