Ruby on rails SQLite3::ConstraintException:列电子邮件不是唯一的
我是Rails的新手,几乎不知道自己在做什么。但是问题是:使用Desive注册新用户会导致: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
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次),然后