从rails中的另一个对象属性创建新对象

时间:2018-02-06 09:53:57

标签: ruby-on-rails ruby oop rails-activerecord

在介绍strong params之前,它运作良好。 因此,在使用new创建新对象并传递属性时,id被设置为nil

但是现在,当我创建一个新对象时,来自现有对象的obj2,obj1的属性,

obj1的

id(主键)也被复制到obj2。

像,

obj2 = Post.new obj1.attributes

因此,当我尝试保存时出现问题,

obj2.save

出现ActiveRecord::RecordNotUnique错误。由于两个对象都具有相同的ID。

我有几个具有相同用例的模型,因此如果我使用dupexcept,我必须在每种情况下添加相同的内容。

2 个答案:

答案 0 :(得分:3)

如果要在新对象中制作属性的副本,则必须使用以下(特定于ActiveRecord):

obj2 = obj1.dup

这样就不会复制id(created|updated)_(at|on)。还要记住,父关联与新对象一样存在。

了解更多https://apidock.com/rails/ActiveRecord/Core/dup

答案 1 :(得分:2)

只需删除id

即可
obj2 = Post.new obj1.attributes.except('id')

或者,使用#dup

obj2 = obj1.dup