2012-02-20 13 views
3

質問: ActiveAdminとDevise 2を使用して、以下のモデル設計をどのように達成できますか?ActiveAdmin、既存の(しかし裸の)Devise 2のユーザーモデルが動作しない

私は、既存のUserモデルを使用してactive_adminを正常にセットアップしました。

私はこのモデル設計の意味( "管理者にユーザーを管理させる")と仮定しました。ここで

は私の現在のモデルが設定されている:

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モデルのためのいくつかのauthenticatonを追加したいと思います。しかし、私はこの競合なし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 

今、私は私の現在のUserモデルにemail属性を持っていないが、ADMINUSERはありません。だから、DeviseがUserに電子メール属性を作成しようとすると、これが私がこのエラーに遭う理由です。しかし、なぜ?彼らは別のモデルにありますか?

経験、柱やチュートリアル、移行には成功し、(同様の回答)

NOTE私は工夫のwikiとhereで見つかったソリューションを試してみましたをいただければ幸いです。

答えて

8

問題はインデックスの作成にあります。テーブルを変更しているので、すでにレコードがあると仮定しています。電子メール列を追加しようとすると、その列にユニークな値がまだないため、ユニークなインデックスを追加しようとすると機能しません。あなたがログイン用の別のフィールド(usernameなど)を持っている場合は、代わりにそのインデックスを追加してください。ログイン用に電子メールを使用する予定の場合は、今すぐインデックスを削除し、一意の値で電子メール列に入力したら追加します。

+0

ありがとうございます。 – rhodee

+0

私は同じ問題を抱えていました。しかし、私は電子メール、文字列、:null => false、デフォルト=> ""のような列をdevise wikiで述べたように変更しました。それはデータ型ではないので、私はそれを単にマイグレーションファイルのインデックスにコメントし、マイグレーションと成功したマイグレーションの後、それらのコメントを外していたので、トリックを見つけることができませんでした。 – Means

関連する問題