2012-02-20 38 views
3

問題:如何使用ActiveAdmin和Devise 2實現以下模型設計?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"] 

現在我想補充一些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 

現在我沒有在我目前的用戶模型中的email屬性,但管理用戶一樣。所以,當Devise試圖在User中創建電子郵件屬性時,我懷疑這就是我得到這個錯誤的原因。但爲什麼?他們在不同的模型?

任何幫助例如經驗,職位或教程,將不勝感激(以及一個答案)

注意我曾嘗試在設計wiki和here找到了解決辦法,對移民沒有成功。

回答

8

問題在於創建索引。由於您正在更改表格,因此我假設您已經有記錄 - 嘗試添加電子郵件列並隨後在其上添加唯一索引不起作用,因爲該列還沒有唯一值。 Devise在電子郵件列上添加了一個索引,因爲它是主要的登錄字段 - 如果您有不同的登錄字段(比如說,用戶名),那麼請在其上添加索引。如果您打算開始使用電子郵件進行登錄,請立即刪除索引,並在您填充電子郵件列時添加唯一值。

+0

非常感謝你,這完全按預期工作。 – rhodee 2012-02-20 19:16:44

+0

我遇到了同樣的問題。然後,我改變了如設計wiki中提到的諸如:email到t.change:email,:string,:null => false,:default =>「」的列,但是索引I找不到任何技巧,因爲它不是數據類型,所以我只是將它評論爲遷移文件中的索引,並繼續進行遷移,並在成功遷移後取消註釋它們。 – Means 2017-04-24 10:37:45

相關問題