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
Voici à quoi sert la méthode ActiveRecord :: Base # clone :
@bar = @foo.clone
@bar.save
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?
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
Vous pouvez créer un enregistrement en double dans Rails comme
@bar = @foo.dup
@bar.save!