2015-09-04 3 views
7

У меня есть модель пользователя с полем электронной почты. Теперь я хотел бы сделать его уникальным, так как в документации, мне нужно применить:Настройка unique_constraint Ecto

cast(user, params, ~w(email), ~w()) 
|> unique_constraint(:email) 

Кроме того, я должен определить уникальный индекс в миграции:

create unique_index(:users, [:email]) 

Проблема заключается в том, что когда я попытался определить это в миграции, добавляя еще несколько полей, это не сработало, и теперь я пытаюсь просто определить миграцию с этим create unique_index(:users, [:email]), и это создает ошибку:

[info] create index users_email_index 
** (Postgrex.Error) ERROR (unique_violation): could not create unique index "users_email_index" 

Что я делаю Неправильно?

+0

Каков фактический ответ об ошибке Postgres? тот, который вы опубликовали, находится в библиотеке postgrex. – emaillenin

ответ

11

Это может произойти, когда уникальное ограничение уже нарушено в вашей таблице.

Проверьте, что у вас еще нет дубликатов адресов в вашей таблице.

Вы можете запустить mix do ecto.drop, ecto.create, ecto.migrate для удаления и воссоздания базы данных и таблиц.

+0

Спасибо. Должно быть, это потому, что после выполнения вашего предложения база данных была очищена, и теперь она работает. –