使用object_dup = object.dup
复制对象时,将复制所有关联。
object_dup.foos == object.foos
我想复制/克隆object
而不关联,或者在复制后删除所有关联。我想销毁object_dup
上所有重复的关联。仅仅创建一个新的对象可能会更容易,但是重复使我摆脱了属性设置的麻烦。
有可能吗?
答案 0 :(得分:1)
实际上,.dup
方法不重复关联,它只是复制外键(父母)。
示例:
# Original
my_post = Post.first
=> #<Post id: 1, title: 'blabla', category_id: 10>
# Duplicate
my_post.dup
=> #<Post id: nil, title: 'blabla', category_id: 10>
# Have the same category_id (10)
我最好的复制方法,没有一些属性:
Post.new(my_post.attributes.slice('titles'))
=> #<Post id: nil, title: 'blabla', category_id: nil>
在这里,我们创建一个新的空Post
,使用my_post.attributes
获取原始帖子属性,并使用slice('title')
仅分割我们想要的属性(接受倍数属性,示例:slice('title', 'content', 'tags')
)