【问题标题】:ActiveAdmin, Devise 2 in existing (but bare) User model not workingActiveAdmin,现有(但裸露的)用户模型中的设计 2 不起作用
【发布时间】:2012-02-20 16:48:02
【问题描述】:

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

现在我的当前 User 模型中没有 email 属性,但 AdminUser 有。因此,当 Devise 尝试在 User 中创建电子邮件属性时,我怀疑这就是我收到此错误的原因。但为什么?它们在不同的模型中?

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

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

【问题讨论】:

    标签: ruby-on-rails devise activeadmin


    【解决方案1】:

    问题在于索引的创建。由于您正在更改表,我假设您已经有记录 - 尝试添加电子邮件列并随后在其上添加唯一索引将不起作用,因为该列还没有唯一值。 Devise 在 email 列上添加一个索引,因为它是主要的登录字段 - 如果您有不同的登录字段(例如,用户名),然后在该字段上添加索引。如果您打算开始使用电子邮件登录,请暂时删除索引,并在使用唯一值填充电子邮件列后添加它。

    【讨论】:

    • 我遇到了同样的问题。然后,我将 :email 等列更改为 t.change :email, :string, :null => false, :default => "" 如设计中所述wiki,但是,对于索引,我找不到任何技巧,因为它不是数据类型,所以我只是在迁移文件中注释了它的索引并继续迁移,成功迁移后,取消注释它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多