2009-04-05 11 views
0

Je veux être en mesure de « clone profond » 10 cas d'un modèle ActiveRecord et toutes ses associations en mémoire, travail sur eux, mettre à jour les objets en mémoire puis, quand j'aurai fini, choisissez-en un pour réécrire l'original dans la base de données.objet ActiveRecord et Caching associations

  1. Comment puis-je profond clone (à savoir .clone mais le clonage aussi toutes les associations jusqu'au bas de l'arbre d'association)? J'ai supposé jusqu'à présent que je vais devoir écrire ma propre méthode dans le modèle.

  2. Comment veiller à ce qu'aucun des cas clonés écrire de nouveau à la base de données jusqu'à ce que je suis prêt à le faire?

Si possible, je voudrais: -

  1. conservent tous les ID actuels comme l'une de mes principales associations est un has_many: par correspondant à l'ID d'un modèle à un autre

  2. encore être en mesure de traiter chacun des clones comme si elle était dans la base de données (c.-à-.find_by_id etc. travailleront)

Lune sur un bâton peut-être? ;)

Répondre

1

pas 100% sûr de ce que vous essayez de faire ...

Les modèles ne seront stockés dans la base de données si vous appelez la méthode d'enregistrement. L'enregistrement de la sauvegarde dans un modèle existant met à jour la base de données avec les données qui ont été modifiées. Les associations peuvent également être sauvegardées, mais cela dépend vraiment du type d'association et, dans la plupart des cas, vous devrez probablement appeler save sur ces modèles.

0

Doh! Parfois, il faut poser la question stupide avant de voir la réponse évidente.

Mon problème était que je faisais de modifier les objets associés et ils ne montraient pas quand je les en mémoire des objets ultérieurement si pensé que je devais sauver. Cependant, vous avez raison. Tout ce qui était en train de se passer était que les variables les référençant étaient hors de portée et j'accédais donc aux bases de données internes.

Je reviendrai sur mon code et vérifierai que c'est le cas.

Cela dit, il ne répond pas à ma question sur le « clonage profond bien » ...

0

J'ai résolu nos problèmes de clonage en profondeur avec le plugin de clonage profond DefV: http://github.com/DefV/deep_cloning

Il est fait Tout ce que j'ai demandé jusqu'ici, bien que vous ayez constaté que vous deviez être très vigilant dans vos relations. Mes tests ont heureusement montré que c'était un problème et je travaille en ce moment. J'ai trouvé ce poste alors que je tentais de le résoudre :)

Vérifiez le plug-in cependant, il a été tout à fait à portée de main.

+0

Merci pour votre inscription. Été un moment depuis que j'ai été sur SO donc excuses pour la réponse tardive :) –