jumpstart-ActiveRecord :: RecordNotUnique:PG :: UniqueViolation:错误:重复的键值违反了唯一约束

时间:2019-07-14 16:42:54

标签: ruby-on-rails postgresql minitest

在全新的Jumpstart / gorails安装和空白数据库上运行rails test时,我得到以下信息:-

DRb::DRbRemoteError: PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_users_on_email"
DETAIL:  Key (email)=() already exists.
 (ActiveRecord::RecordNotUnique)

在我的架构中,导致用户出现上述情况的原因如下:-

t.index ["email"], name: "index_users_on_email", unique: true

似乎错误告诉我已有记录(用户?),但是数据库为空,所以我不明白为什么会这样?

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式进行处理: 创建用户时,我遇到了类似的问题。 我是这样固定的。

begin
   User.where(email: "abc@gmail.com").first_or_create(email:"abc@gmail.com", name: "name of user", other fields)
rescue ActiveRecord::RecordNotUnique
   retry
end

答案 1 :(得分:0)

检查以查看test/fixtures/users.yml中是否有空白条目。如果是这样,请将其删除,或给他们提供非空的电子邮件地址。

我没有使用Jumpstart,但是从他们网站的快速扫描中,我猜测它正在使用Devise,它会创建两个空白的固定装置,并且如果您在任何字段上添加了唯一索引,都会使测试失败