Я добавил проверки пароля к моей модели User
:
validates :password, presence: true
validates :password, confirmation: { case_sensitive: true }
, но затем, когда я захотел обновить другие поля на users
, эти проверки сделали транзакцию недействительной, как password
отсутствовал.
В результате небольшого исследования я понял, что могу пропустить эти проверки, если password
не присутствует:
validates :password, presence: true, if: :validate_password?
validates :password, confirmation: { case_sensitive: true }, if: :validate_password?
def validate_password?
password.present? || password_confirmation.present?
end
Однако теперь, когда я отправляю пробелпароль и подтверждение пароля, validate_password?
возвращает false
.Я не совсем понимаю, что происходит, потому что
@user.update_attributes(password_reset_edit_params)
возвращает true
, где
password_reset_edit_params
равно <ActionController::Parameters {"password"=>"", "password_confirmation"=>""} permitted: true>
, новнутри
def validate_password?
password.present? || password_confirmation.present?
end
password
и password_confirmation
оценивается как nil
, а мой @user
пароль не обновляется до пустой строки.
Я должен упомянуть, что я 'м, используя Bcrypt, и @user.password
фактически всегда будет оцениваться как nil
, тогда как password_digest
доступно.
Так, каково решение?В конечном счете, я думаю, что мой вопрос прост:
Как можно игнорировать проверки пароля, когда я не пытаюсь предоставить пароль, но также разрешать эти проверки при отправке пустой строки?
Это происходитдля меня, что я мог бы добавить в контроллер условие, которое не позволяет передавать пустые строки, но должен быть аккуратный способ решить эту проблему.
Любая помощь очень ценится.Спасибо!