Postgres(Rails 5)自动分配测试期间已存在的主键

时间:2017-02-02 20:21:35

标签: ruby-on-rails postgresql

看了几个像这样的问题,但还没有找到解决方案。任何帮助非常感谢!

我正在使用Postgres设置Rails 5 API。我有一个应该创建有效用户的基本测试(Minitest):

test "valid user" do
  cyclist = User.new(
    type: "cyclist",
    first_name: "Lyla",
    last_name: "Legstrong",
    email: "lyla@legstrong.co",
    password: "passtest123!",
    bio: "I am an avid cyclist with strong, strong legs.",
    avg_rating: 8
  )
end

运行测试会产生以下错误:

Error:
UserTest#test_valid_user:
ActiveRecord::RecordNotUnique: PG::UniqueViolation: 
ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(980190962) already exists.
: INSERT INTO "users" ("type", "first_name", "last_name", "photo", 
"email", "password_digest", "bio", "avg_rating", "created_at", 
"updated_at", "id") VALUES (NULL, 'MyString', 'MyString', 'MyString', 
'MyString', 'MyString', 'MyText', 1, '2017-02-02 19:46:15.655673', 
'2017-02-02 19:46:15.655673', 980190962)

我已经尝试了this question的前两个答案中建议的解决方案,但仍然得到完全相同的错误。我也尝试了this - 它打印出setval ----------- 980190967(我看到的最高值,所以它看起来应该有效)但是当我运行测试时我再次得到同样的错误,同样的重复的pkey(980190962)。

还有一件事:在rails控制台中运行User.create也会产生相同的错误。如果我连续两次或三次运行它,它会尝试分配序列中的下一个ID(也是后者),然后是下一个(相同的问题),然后下一个ID可用并且它可以工作。

不确定这是否会影响事情,但我正在使用单个表继承设置 - 一个用户超类,它有两个从中继承的子类(即测试中的type: "cyclist")。另外,我对此很新,所以请随意提出我可能错过的简单事情......谢谢!

0 个答案:

没有答案