Ruby on rails 数据库中存在Rails 4 Desive/Omniauth电子邮件错误
我正试图弄明白这一点,我的头撞在墙上。我决定允许用户通过twitter、谷歌、我的网站或Facebook登录。问题是twitter不提供电子邮件,所以我尝试通过用户名添加用户。问题是Deave一直在检查电子邮件,当我不需要它时,我会得到PG::Error:Error:重复的键值违反了唯一约束“index_users_on_email”DETAIL:key(email)=()已经存在:在“users”(“created_at”、“name”、“provider”、“uid”、“updated_at”、“username”)中插入返回“id”的值($1、$2、$3、$4、$5、$6)Ruby on rails 数据库中存在Rails 4 Desive/Omniauth电子邮件错误,ruby-on-rails,devise,twitter,omniauth,ruby-on-rails-4,Ruby On Rails,Devise,Twitter,Omniauth,Ruby On Rails 4,我正试图弄明白这一点,我的头撞在墙上。我决定允许用户通过twitter、谷歌、我的网站或Facebook登录。问题是twitter不提供电子邮件,所以我尝试通过用户名添加用户。问题是Deave一直在检查电子邮件,当我不需要它时,我会得到PG::Error:Error:重复的键值违反了唯一约束“index_users_on_email”DETAIL:key(email)=()已经存在:在“users”(“created_at”、“name”、“provider”、“uid”、“updated_at
我不知道我该怎么办。我在数据库中创建了一个username列,并确保将其添加到designe.rb初始化器中,
config.authentication\u keys=[:username]
我认为这是因为默认designe安装会在电子邮件coulmn上创建唯一的密钥。在您的例子中,它是空的,因此第二个用户没有唯一的字符串(因为空字符串由第一个用户使用)
就我而言,移民
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
class AllowNullEmailtrue
结束
降下
更改列:用户,:电子邮件,:字符串,:null=>false
添加索引:users,:email,unique:true
结束
结束
我认为这是因为默认设计安装在电子邮件coulmn上创建了唯一的密钥。在您的例子中,它是空的,因此第二个用户没有唯一的字符串(因为空字符串由第一个用户使用)
就我而言,移民
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
class AllowNullEmailtrue
结束
降下
更改列:用户,:电子邮件,:字符串,:null=>false
添加索引:users,:email,unique:true
结束
结束
Create migration不删除电子邮件列上的唯一和热空值。请参阅扩展答案。@MichalSzyndel这是有效的。我在Rails 4.2.3、Desive 3.5.1和PostgresqlCreate迁移中发现了这个错误,并在电子邮件列中删除了unique和hot null。请参阅扩展答案。@MichalSzyndel这是有效的。我在Rails 4.2.3、Desive 3.5.1和Postgresql上发现了这个错误