Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 数据库中存在Rails 4 Desive/Omniauth电子邮件错误_Ruby On Rails_Devise_Twitter_Omniauth_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 数据库中存在Rails 4 Desive/Omniauth电子邮件错误

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

我正试图弄明白这一点,我的头撞在墙上。我决定允许用户通过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)


我不知道我该怎么办。我在数据库中创建了一个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上发现了这个错误