2009-11-27 8 views
1

berger has_many animaux. Je suis en train de cloner un d'entre eux:Rails has_many association et ActiveRecord # clone

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

J'obtiens l'erreur:

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

pourquoi? Qu'est-ce qu'une autre façon de cloner Dolly pour qu'elle soit associée à un berger et ait des attributs de mouton?

Répondre

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

build exige que l'argument soit un hachage d'attributs. Sinon

dolly = shepherd.animals << sheep.clone 
2

Les constructeurs ActiveRecord :: Base prennent un hachage de paramètre. Passer un objet ne le fait pas tout à fait. Vous devez donc interroger le hachage des attributs de l'objet en question.

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

En fait, les constructeurs ignorent l'attribut id, de sorte que vous pouvez vous en sortir avec:

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