Итак, у меня есть простая пользовательская модель и форма для обновления пароля.Rails проверяет уникальность при обновлении объекта? - очень странно
@user.update_attributes(:password=>params[:password])
Но это не сработало, и я понял:
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."auth_token" = 'z7KU4I0IXLjiRMpdF6SOVQ' LIMIT 1
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."password_reset_token" = 'aMOjTN0ikPUOJo2JMVoDtQ' LIMIT 1
(0.0ms) BEGIN
User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 1) LIMIT 1
(0.0ms) ROLLBACK
Redirected to http://localhost:3000/edit_user_by_reset?reset_token=aMOjTN0ikPUOJo2JMVoDtQ
По 3 выбору я могу сказать, что здесь не удалась проверка уникальности! И это причина для ROLLBACK. Но это не имеет смысла, конечно, в DB есть такая строка, так как это UPDATE-действие. Что мне делать? Я не хочу проходить :validate=>false
здесь.
Есть по крайней мере два пользователя с одинаковым адресом электронной почты, один имеет id = 1, другой - нет. –
Перечитанный вопрос, очевидно, что есть такой пользователь, потому что он является действием UPDATE, он обновляет некоторые столбцы существующей строки –
Я утверждаю, что User.find (1) .valid? вернет false. То, что вы считаете «очевидным», неверно. Запрос ищет * других * пользователей (т.е. те, у которых есть другой идентификатор), которые имеют один и тот же адрес электронной почты. –