ActiveAdmin,Devise 2在现有(但裸)用户模型不起作用

时间:2012-02-20 16:48:03

标签: ruby-on-rails devise activeadmin

问题:如何使用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"]

现在我想为我的用户模型添加一些身份验证。但是,如果没有此冲突,我无法迁移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属性,但是AdminUser有。{1}}属性。因此,当Devise尝试在User中创建电子邮件属性时,我怀疑这就是我收到此错误的原因。但为什么?他们有不同的模特?

任何帮助,例如经验,帖子或教程将不胜感激(以及答案)

注意我已经尝试了在Devise wiki和here上找到的解决方案,但没有成功迁移。

1 个答案:

答案 0 :(得分:8)

问题在于创建索引。由于您要更改表,我假设您已经有记录 - 尝试添加电子邮件列并随后在其上添加唯一索引将无法工作,因为该列还没有唯一值。 Devise在电子邮件列上添加索引,因为它是主要登录字段 - 如果您有不同的登录字段(例如,用户名),则在其上添加索引。如果您计划开始使用电子邮件进行登录,请立即删除索引,并在使用唯一值填充电子邮件列后添加该索引。