На самом деле .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')
)
.dup Документация
.Slice Документация