#ruby-on-rails #railstutorial.org
#ruby-on-rails #railstutorial.org
Вопрос:
В главе 7 из руководства Майкла Хартла есть модель пользователя <код здесь>, у которой атрибут пароля определен как attr_accessor, а также как attr_accessible с помощью средства проверки присутствия.
Проблема в том, что если я извлекаю существующего пользователя и пытаюсь обновить его электронную почту, ruby выдает исключение, запрашивающее его пароль, и я вынужден заново устанавливать пароль каждый раз, когда я хочу обновить любой другой атрибут. Пример:
User.first.update_attributes!(:email => "example@mail.com")
ActiveRecord::RecordInvalid: Validation failed: Password can't be blank, Password is too short (minimum is 6 characters)
Я добавил «: on => :create» рядом с средством проверки наличия пароля, и это, казалось, решило проблему. Является ли это правильным решением в отношении системы входа в систему?
Любой, кто прошел руководство Майкла Харлта, знает, было ли это ошибкой или это было его реальное намерение?
Ответ №1:
Вы хотите добавить средство проверки в поле хэша пароля, чтобы проверялся фактический пароль, хранящийся в базе данных. Если вы заставите password=
функцию установить значение столбца хэша, то этот метод будет работать независимо от фактической виртуальной переменной password.
Комментарии:
1. Это могло бы сработать, но я также хочу убедиться, что пользователь заполняет поле пароля на этапе создания, вот почему я добавил средство проверки наличия для пароля (виртуального).
2. Если вы создадите средство проверки для поля password_hash, то оно будет работать, потому что password = обновит этот столбец.