2014-09-12 46 views
1

我与这个post相同的问题。但我使用Rails,并不知道如何在activerecord中执行此解决方法。Rails + postgres自动增量没有更新显式ID插入

device_platforms = DevicePlatform.create([{id: 1, name: 'Android'}, {id: 2, name: 'IOS'}, {id: 3, name: 'Windows Phone'}]) 

当我插入另一DevicePlatform,我得到这个异常:

Failure/Error: @device_platform = FactoryGirl.create(:device_platform) 
ActiveRecord::RecordNotUnique: 
    PG::UniqueViolation: ERRO: duplicar valor da chave viola a restrição de unicidade "device_platforms_pkey"                 
    DETAIL: Chave (id)=(2) já existe. 
    : INSERT INTO "device_platforms" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id"   

的消息是葡萄牙语,它说,一个

我使用seeds.rb插入一些数据具有该ID的行已经存在。

谢谢。

+0

你为什么指定ID? – 2014-09-12 17:32:27

+0

我不确定你的意思,你正在调用'create',所以你要“去数据库”。如果在种子创建调用中只有'{name:'Android'},{name:'IOS'}等,那么你的代码会不起作用? – 2014-09-12 17:35:24

+0

不要在种子中包含“id”。如果你必须在你的种子中包含'id's,那么在添加种子后,你必须在另一个问题中'connection.execute' SQL。 – 2014-09-12 17:40:13

回答

0

根据评论,在种子中使用id是一种不好的做法。我避免了不好的做法,这对我来说已经足够了。改变了我的代码以避免这种情况。