Удалить все ассоциации из дублированного объекта - PullRequest
0 голосов
/ 08 ноября 2018

При дублировании объекта с object_dup = object.dup копируются все ассоциации.

object_dup.foos == object.foos

Я хотел бы дублировать / клонировать object без его ассоциаций или удалить все ассоциации после дублирования. Я хотел бы уничтожить все дублированные ассоциации на object_dup. Возможно, будет проще создать новый объект, но дублирование спасет меня от свойства-ад-настройки.

Возможно ли это?

1 Ответ

0 голосов
/ 08 ноября 2018

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

...