Devise возвращает 2 ошибки, когда нужно найти только 1
У меня есть модуль validatable
включен для моего приложения. На экране, когда я спрашиваю адрес электронной почты пользователя для регистрации, если электронная почта уже существует... я вижу эту ошибку:
We found 2 errors that prevented your account from being created:
Email has already been takenEmail has already been taken
Это из логов:
Started POST "/users" for 127.0.0.1 at 2012-06-21 14:37:41 -0500
Processing by RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"zcpDH5U4XkHcYWVHEqrshgmzGiqsZHI9mD6Inrdr8uE=", "user"=>{"email"=>"abc@email.com"}, "commit"=>"Sign Me Up!"}
(0.1ms) begin transaction
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = 'abc@email.com' LIMIT 1
User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('abc@email.com') LIMIT 1
(0.1ms) rollback transaction
Rendered devise/shared/_links.erb (0.8ms)
Rendered devise/registrations/new.html.erb within layouts/application (6.5ms)
Completed 200 OK in 1118ms (Views: 290.9ms | ActiveRecord: 0.0ms)
Как я могу получить это от попытки сделать две проверки и просто сделать 1?
2 ответа
Rails запускает отдельные проверки для каждой проверки, поэтому проверка наличия и проверки уникальности приведет к двум проверкам. Если вы хотите избежать лишних сообщений об ошибках, вы можете сделать что-то подобное ниже и выводить только уникальные сообщения об ошибках:
#error_explanation
.alert.alert-error
Please correct the following #{pluralize(object.errors.full_messages.uniq.size, "error")}:
%ul
- object.errors.full_messages.uniq.each do |msg|
%li #{msg}
Пытался войти, но он не позволил мне.
Я не делаю ruby, но, похоже, вы вводите электронное письмо, которое соответствует критериям обоих. Наверное, нужен только второй. Надеюсь это поможет!
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = 'abc@email.com' LIMIT 1
User Exists (0.1ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('abc@email.com') LIMIT 1