Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 SQLite3::ConstraintException:列电子邮件不是唯一的_Ruby On Rails_Ruby_Sqlite_Devise - Fatal编程技术网

Ruby on rails SQLite3::ConstraintException:列电子邮件不是唯一的

Ruby on rails SQLite3::ConstraintException:列电子邮件不是唯一的,ruby-on-rails,ruby,sqlite,devise,Ruby On Rails,Ruby,Sqlite,Devise,我是Rails的新手,几乎不知道自己在做什么。但是问题是:使用Desive注册新用户会导致: SQLite3::ConstraintException: column email is not unique: INSERT INTO "users" ("created_at","encrypted_password", "name", "updated_at") VALUES (?, ?, ?, ?) 以及请求参数: {"utf8"=>"✓", "authenticity_tok

我是Rails的新手,几乎不知道自己在做什么。但是问题是:使用Desive注册新用户会导致:

SQLite3::ConstraintException: column email is not unique: 
INSERT INTO "users" ("created_at","encrypted_password", "name", "updated_at") 
VALUES (?, ?, ?, ?)
以及请求参数:

 {"utf8"=>"✓",
 "authenticity_token"=>"1bgk4ovS3JitphVkIvcCZi3ex8QsBq4eEf6ZihQLiHg=",
 "user"=>{"name"=>"Someone",
 "email"=>"8@prosto.me",
 "password"=>"[FILTERED]"},
 "commit"=>"Sign up"}
用户模型:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable;
end

更新2:身份验证也有问题。Desive为任何先前成功注册的用户告知“无效电子邮件或密码”,以尝试登录。

尝试向您的
用户添加唯一性验证
型号:

validates_uniqueness_of :email, :allow_blank => true

这将重新呈现您的用户创建表单,而不会导致错误。

尝试将唯一性验证添加到您的
用户
模型:

validates_uniqueness_of :email, :allow_blank => true

这将重新呈现用户创建表单,而不会导致错误。

该数据库中是否有其他“电子邮件”列?


也许您已经有了一个“users”表,其中的email列已经通过designe进行了复制。如果您能告诉我们您的表有哪些列,那将很有帮助:)

该数据库中还有其他“电子邮件”列吗?


也许您已经有了一个“users”表,其中的email列已经通过designe进行了复制。如果您能告诉我们您的表有哪些列,这将非常有用:)

SQLite告诉您它正在尝试创建一个新记录,其中一个值将是电子邮件,但该电子邮件中已有一个记录

读取数据库记录的一种简单方法是在终端窗口中查询数据库:

$ rails console
$ User.all
如果您想查看将与设备一起加载的测试数据库:

$ rails console -e=test
$ User.all
查找与您试图创建的电子邮件相同的记录

如果这是您第一次使用Desive,您应该检查您的设备。“设计”当前默认为两个没有属性的装置。如果您在测试环境中运行,那么这些装置将作为两条记录加载到测试数据库中,电子邮件的值为零,这是重复的电子邮件值。下面的装置会让您传递错误消息

file: app/test/fixtures/users.yml

one:
  email: user@example.com
  encrypted_password: password1

two:
  email: user2@example.com
  encrypted_password: password2

SQLite告诉您,它正在尝试创建一个新记录,其中一个值将是一封电子邮件,但该电子邮件已经存在一个记录

读取数据库记录的一种简单方法是在终端窗口中查询数据库:

$ rails console
$ User.all
如果您想查看将与设备一起加载的测试数据库:

$ rails console -e=test
$ User.all
查找与您试图创建的电子邮件相同的记录

如果这是您第一次使用Desive,您应该检查您的设备。“设计”当前默认为两个没有属性的装置。如果您在测试环境中运行,那么这些装置将作为两条记录加载到测试数据库中,电子邮件的值为零,这是重复的电子邮件值。下面的装置会让您传递错误消息

file: app/test/fixtures/users.yml

one:
  email: user@example.com
  encrypted_password: password1

two:
  email: user2@example.com
  encrypted_password: password2


我试过了。Desive抛出“电子邮件已被接收”错误。提供的电子邮件对应用程序来说当然是全新的。@VladislavIvanov我认为您遇到的问题是,它确保了电子邮件的唯一性,但如果您希望电子邮件具有空白默认值,则必须使用
:allow_blank=>true
来接受空白值。请参阅上面我的更新答案,希望这对您有用。感谢您的建议,但现在我收到应用程序错误“SQLite3::ConstraintException:列电子邮件不是唯一的:插入到“用户”(“创建时间”、“加密密码”、“名称”、“更新时间”)值(?,,,,,?)“@VladislavIvanov您能在问题中的用户表中发布数据吗?我想可能有一些数据正在破坏任何新的存储。那么我该怎么做呢?:-)我试过了。Desive抛出“电子邮件已被接收”错误。提供的电子邮件对应用程序来说当然是全新的。@VladislavIvanov我认为您遇到的问题是,它确保了电子邮件的唯一性,但如果您希望电子邮件具有空白默认值,则必须使用
:allow_blank=>true
来接受空白值。请参阅上面我的更新答案,希望这对您有用。感谢您的建议,但现在我收到应用程序错误“SQLite3::ConstraintException:列电子邮件不是唯一的:插入到“用户”(“创建时间”、“加密密码”、“名称”、“更新时间”)值(?,,,,,?)“@VladislavIvanov您能在问题中的用户表中发布数据吗?我想可能有一些数据正在破坏任何新的存储。那么我该怎么做呢?:-)看起来您遇到了相同的问题:嗯,尝试创建一个用户表。这是一件你不应该做的事情,但它可能会帮助你。@Dave Deave在安装后工作得非常好。所以我认为情况并非如此。好吧,如果我删除用户表-那又怎样?您是否尝试过另一封电子邮件,它可能不仅仅是一个数字作为前缀?这可能是一个可能的原因,就像你有同样的问题:嗯,尝试一个用户表。这是一件你不应该做的事情,但它可能会帮助你。@Dave Deave在安装后工作得非常好。所以我认为情况并非如此。好吧,如果我删除用户表-那又怎样?您是否尝试过另一封电子邮件,它可能不仅仅是一个数字作为前缀?这可能是一个原因Qlite3::ConstraintException:列电子邮件不是唯一的:插入“用户”(“创建时间”、“加密时间”、“密码”、“名称”、“更新时间”)值(?,,,,?)->看起来您没有插入带有此查询的电子邮件?这可能是问题所在吗?我如何检查?顺便问一下,我是一个真正的新手:-)你是如何得到你在文章顶部发布的SQL转储的?我的印象是你在测试中通过系统发送了数据,但似乎你只是通过Desive表单注册了你的应用程序?嗯,这太令人困惑了!你有可以分享的日志吗?你可以通过访问/log/development.logOK来获取它们,这是我无法解释的。我重启了服务器好几次(之前至少重启了5次),然后