ActiveAdmin, Devise 2 в существующей (но голой) модели пользователя не работает - PullRequest
3 голосов
/ 20 февраля 2012

Вопрос: Как мне добиться дизайна модели ниже, используя ActiveAdmin и Devise 2?

Я успешно настроил active_admin с существующей моделью User для ее начальной загрузки.

Я предположил, что это означает, что дизайн модели («Пусть администраторы управляют пользователями»).

Вот моя текущая модель:

 irb(main):003:0> User.column_names
 => ["id", "created_at", "updated_at", "avatar", "name"]
 irb(main):004:0> AdminUser.column_names
 => ["id", "email", "encrypted_password", "reset_password_token",    "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "created_at", "updated_at"]

Теперь я хотел бы добавитьнекоторая аутентификация для моей модели User.Однако я не могу перенести результаты rails generate devise User без этого конфликта:

 ==  AddDeviseToUsers: migrating ===============================================
 -- change_table(:users)
 -> 0.7201s
 -- add_index(:users, :email, {:unique=>true})
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  could not create unique index "index_users_on_email"
DETAIL:  Key (email)=() is duplicated.
: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")

Tasks: TOP => db:migrate

Теперь у меня нет атрибута email в моей текущей модели User, но AdminUser делает.Поэтому, когда Devise пытается создать атрибут электронной почты в User, я подозреваю, что именно поэтому я получаю эту ошибку.Но почему?Они в разных моделях?

Любая помощь, например, опыт, сообщения или учебные пособия будет оценена (а также ответ)

ПРИМЕЧАНИЕ Я пробовал решение, найденное наВики для разработки и здесь , безуспешно при миграции.

1 Ответ

8 голосов
/ 20 февраля 2012

Проблема в создании индекса.Поскольку вы меняете таблицу, я предполагаю, что в ней уже есть записи - попытка добавить столбец электронной почты и впоследствии добавить уникальный индекс для него не будет работать, поскольку столбец еще не будет иметь уникальных значений.Devise добавляет индекс к столбцу электронной почты, поскольку он является основным полем для входа в систему - если у вас есть другое поле для входа (скажем, имя пользователя), то вместо этого добавьте в него индекс.Если вы планируете начать использовать электронную почту для входа в систему, удалите индекс и добавьте его после заполнения столбца электронной почты уникальными значениями.

...