web-dev-qa-db-fra.com

Copier des instances de modèle dans Rails

J'ai un modèle Foo avec les attributs id, name, location. J'ai une instance de Foo:

f1 = Foo.new
f1.name = "Bar"
f1.location = "Foo York"
f1.save

J'aimerais copier f1 et, à partir de cette copie, créer une autre instance du modèle Foo, mais je ne veux pas que f1.id soit reporté à f2.id (je ne veux pas l'affecter explicitement, je veux que la base de données le gère, Comme il se doit).

Y at-il un moyen simple de ce faire, autre que la copie manuellement chaque attribut? Tout construit en fonctions ou aurait écrit un être le meilleur itinéraire?

Merci

37
user94154

Voici à quoi sert la méthode ActiveRecord :: Base # clone :

@bar = @foo.clone

@bar.save
59
Vitaly Kushner

Selon la question suivante, si vous utilisez Rails> = 3.1, vous pouvez utiliser object.dup:

Quel est le moyen le plus simple de dupliquer un enregistrement d'activerecord?

69
mydoghasworms

une mauvaise manière de le faire serait:

f2 = Foo.new( f1.attributes )     # wrong!
f2.save                           # wrong!

ou sur une ligne, mais toujours faux :

f2 = Foo.create( f1.attributes )  # wrong!

voir les commentaires pour plus de détails

2
bjelli

Vous pouvez créer un enregistrement en double dans Rails comme 

@bar = @foo.dup
@bar.save!
0
Foram Thakral