2

我把头“撞”在墙上,试图弄清楚这一点。我决定允许用户通过 twitter、Google、我的网站或 Facebook 登录。问题是 twitter 不提供电子邮件,所以我试图通过用户名添加用户。问题是设计不断检查电子邮件,当我不需要它时,我得到 PG::Error: 错误:重复键值违反唯一约束“index_users_on_email”详细信息:键(电子邮件)=()已经存在。: INSERT INTO "users" ("created_at", "name", "provider", "uid", "updated_at", "username") 值 ($1, $2, $3, $4, $5, $6) 返回 "id"。

我不知道我应该怎么做。我在数据库中创建了一个用户名列,并确保将其添加到我的 devise.rb 初始化程序中,config.authentication_keys = [ :username ]

4

1 回答 1

4

我认为这是因为默认的设计安装会在电子邮件库上创建唯一的密钥。在您的情况下,它是空的,因此第二个用户没有唯一的(因为第一个用户采用空字符串)。

在我的情况下迁移

class AllowNullEmail < ActiveRecord::Migration
  def up
    remove_index :users, :email
    change_column :users, :email, :string, :null => true
  end

  def down
    change_column :users, :email, :string, :null => false
    add_index :users, :email, unique: true
  end
end
于 2013-06-14T22:36:04.437 回答