Ассоциация Rails has_many и ActiveRecord # clone - PullRequest
1 голос
/ 27 ноября 2009

пастух has_many животные. Я пытаюсь клонировать один из них:

dolly=shepherd.animals.build(sheep.clone)

Я получаю ошибку:

undefined method `stringify_keys!' for #<Sheep:0xb6ce154c>

почему? Как еще можно клонировать Долли, чтобы она была связана с пастухом и имела овечьи черты?

Ответы [ 2 ]

9 голосов
/ 27 ноября 2009
dolly = shepherd.animals.build(sheep.clone.attributes)

build требует, чтобы аргумент был хэшем атрибутов. В противном случае

dolly = shepherd.animals << sheep.clone
2 голосов
/ 27 ноября 2009

ActiveRecord :: Базовые конструкторы принимают хеш параметра. Передача объекта не совсем делает это. Поэтому вам нужно запросить атрибуты хэша рассматриваемого объекта.

dolly=shepherd.animals.build(sheep.clone.attributes)

На самом деле конструкторы игнорируют атрибут id, поэтому вы можете обойтись без:

dolly=shepherd.animals.build(sheep.attributes)
...