jumpstart - ActiveRecord::RecordNotUnique: PG::UniqueViolation: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности

Я получаю следующее при запуске rails test на совершенно новой установке jumpstart/gorails и пустой базе данных:

DRb::DRbRemoteError: PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_users_on_email"
DETAIL:  Key (email)=() already exists.
 (ActiveRecord::RecordNotUnique)

В моей схеме у меня есть следующее для пользователей, что вызывает вышеизложенное: -

t.index ["email"], name: "index_users_on_email", unique: true

Кажется, ошибка говорит мне, что есть существующая запись (пользователь?), но БД пуста, поэтому я не понимаю, почему это происходит?


person s89_    schedule 14.07.2019    source источник
comment
Разрешаете ли вы в настоящее время значения NULL для адреса электронной почты? Если это так, возможно, вы вставляете несколько записей с нулевым адресом электронной почты. Toss — это проверка присутствия на модели, чтобы убедиться, что у вас есть адрес электронной почты, и посмотреть, изменится ли проблема на ошибку проверки.   -  person Nate    schedule 14.07.2019


Ответы (2)


Вы можете справиться следующим образом: у меня была аналогичная проблема при создании пользователя. Я исправил таким образом.

begin
   User.where(email: "[email protected]").first_or_create(email:"[email protected]", name: "name of user", other fields)
rescue ActiveRecord::RecordNotUnique
   retry
end
person Bhimasen Rautaray    schedule 15.07.2019
comment
Было бы неплохо иметь подсчет повторных попыток, если условия гонки вызывают бесконечный цикл? - person Int'l Man Of Coding Mystery; 15.07.2019

Проверьте, нет ли у вас пустых записей в test/fixtures/users.yml. Если это так, удалите их или дайте им ненулевые адреса электронной почты.

Я не использовал jumpstart, но из быстрого сканирования их веб-сайта я предполагаю, что он использует Devise, который создает два пустых прибора и заставит тесты блокироваться, если вы добавите уникальный индекс для любого поля.

person blackrat    schedule 05.10.2020