0

我正在尝试覆盖 rails 4.0 中的记录。

old_p.update_attributes(new_p.attributes)

old_p是从数据库中提取的new_p记录,是用户创建的将替换数据库中的记录的记录。new_p实际上在数据库中有自己的记录,但只是暂时存储在那里。

这似乎在某些时候有效,但大多数时候它会返回

ActiveRecord::RecordNotUnique in Controller#overwrite
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint

这是从 rails 2 升级而来的,当它是 rails 2 应用程序时,它似乎一直在按预期工作。关于 update_attributes 的文档似乎很少,但似乎它也在复制对象的 id。

我稍后也尝试过使用 .save 的 assign_attributes,但效果相同。

如果它也在复制对象的 id,有没有办法轻松地忽略 id?由于记录有大约 20 多个属性,我必须手动输入,并且它们可能会经常更改。还是我还缺少其他东西?

4

1 回答 1

0

您可以使用

old_p.update_attributes(new_p.attributes.tap { |h| h.delete('id')})
于 2013-08-02T22:09:04.563 回答