41 votes

Copier des instances de modèle dans Rails

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

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

Je voudrais copier f1 et à partir de cette copie, d'en créer une autre instance de l' Foo modèle, mais je ne veux pas f1.id report d' f2.id (je ne veux pas affecter explicitement que, je veux la db pour le gérer, comme il se doit).

Est-il une façon simple de le faire, d'autres que la copie manuelle de chaque attribut? Toutes les fonctions intégrées ou serait à l'écriture d'un être le meilleur itinéraire?

Merci

78voto

mydoghasworms Points 6190

Conformément à la question suivante, si vous utilisez Rails> = 3.1, vous pouvez utiliser object.dup :

Quelle est la façon la plus simple de dupliquer un enregistrement activerecord?

61voto

Vitaly Kushner Points 3975

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

 @bar = @foo.clone

@bar.save
 

2voto

bjelli Points 3569

une mauvaise façon de procéder serait:

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

ou en une seule ligne, mais toujours faux :

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

voir les commentaires pour plus de détails

-2voto

Shadwell Points 14102

Vous pouvez utiliser les méthodes attributes intégrées fournies par rails. Par exemple

 f2 = Foo.new(f1.attributes)
 

ou

 f2 = Foo.new
f2.attributes = f1.attributes
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X