我正在尝试覆盖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多个属性,我必须手动输入,它们可能经常更改。或者还有其他我想念的东西?
答案 0 :(得分:0)
您可以使用
old_p.update_attributes(new_p.attributes.tap { |h| h.delete('id')})