2015-04-22 92 views
2

由于在我们的Rails应用程序中删除用户的错误,我试图强制另一个用户记录到旧的记录ID中。Rails:为新记录强制指定的id(或更改已有的id)

$ rails console 
> User.find(2) 
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=2 
> replacer = User.find(5) 
=> #<User id: 5, created_at: [omitted for brevity ...] > 
replacer.id = 2 
=> 2 
replacer.save 
=> true 
> User.find(2) 
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=2 
> User.find(5) 
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=5 
> replacer 
=> #<User id: 2, created_at: [omitted for brevity ...] > 
> replacer.valid? 
=> true 

这是怎么回事?

+0

你不能从AR做它,在数据库中正确执行它。 –

+0

我之前用AR做过这样的事情。不知道如何在数据库中做到这一点奇怪的事情是记录似乎已经保存但无法找到id:5 *或* id:2。这就像它是在迷失... – Meltemi

+0

当你做'replacer .save!'? – 2015-04-23 04:59:55

回答

1

您的更新语句是使用已设置为2的内存对象的ID构建的。您无法更新不存在的记录。

如果你想留在活动记录的土地,我认为你可以这样做:User.update(5, id: 2)

如果做不到这一点,你绝对可以在SQL做。 UPDATE users SET id = 2 WHERE id = 5

+0

这也可以跨表格完成,关系?例如,你在db中输入了两次相同的公司,这两个公司之间也有关系,你需要所有的关系来引用另一个,以便合并它们。 – unmircea