2009-04-05 5 views
0

Ich möchte 10 Instanzen eines ActiveRecord-Modells und alle Assoziationen in den Speicher "klonen", daran arbeiten, die In-Memory-Objekte aktualisieren und dann, wenn ich fertig bin, Wählen Sie einen aus, um das Original in der Datenbank zu überschreiben.Caching ActiveRecord Objekt und Assoziationen

  1. Wie kann ich tief Klon (das heißt .clone, sondern auch alle Verbände Klonen bis auf den Boden des Vereins Baum)? Ich habe bisher angenommen, dass ich meine eigene Methode im Model schreiben muss.

  2. Wie kann sichergestellt werden, dass keine der geklonten Instanzen in die Datenbank zurückschreiben, bis ich dazu bereit bin?

Wenn möglich, ich möchte: -

  1. alle aktuellen IDs behalten als eine meiner wichtigsten Verbände ist ein has_many: durch die IDs eines Modells passend zu einem anderen

  2. noch in der Lage sein, jeden der Klone zu behandeln, als ob es in der Datenbank war (dh .find_by_id usw. arbeiten)

Mond auf einem Stock vielleicht? ;)

Antwort

1

nicht zu 100% sicher, was Sie zu tun versuchen ...

Modelle werden nur in der Datenbank gespeichert werden, wenn Sie die Methode speichern aufrufen. Beim Speichern in einem vorhandenen Modell wird die Datenbank mit allen geänderten Daten aktualisiert. Assoziationen können auch gespeichert werden, aber es hängt wirklich von der Art der Assoziation ab und in den meisten Fällen müssen Sie diese Modelle auch sicher aufrufen.

0

Doh! Manchmal braucht man die dumme Frage, bevor man die offensichtliche Antwort sieht.

Mein Problem war, dass ich Änderungen an den verknüpften Objekten vornehmen musste, und sie wurden nicht angezeigt, wenn ich diese In-Memory-Objekte später verwendete, dachte also, ich musste speichern. Du hast jedoch recht. Alles, was tatsächlich geschah, war, dass die Variablen, die auf sie verwiesen hatten, nicht mehr in Geltung waren und ich daher stattdessen auf die datenbankinternen Variablen zugreift.

Ich gehe zurück durch meinen Code und überprüfe, ob dies der Fall ist.

auch sagen, dass es nicht meine Frage nach der „obwohl tief Klonen“ antwortet ...

0

ich unser tiefes Klonen Probleme mit DefV tiefes Klonen Plugin gelöst haben: http://github.com/DefV/deep_cloning

Es ist geschafft alles, was ich bisher benötigt habe, obwohl du, wie du herausgefunden hast, sehr auf deine Beziehungen achten musst. Meine Tests haben das glücklicherweise als Problem gezeigt und ich arbeite gerade daran. Ich fand diesen Beitrag, als ich versuchte, es zu lösen :)

Überprüfen Sie das Plugin obwohl es ziemlich praktisch war.

+0

Danke dafür. Eine Weile, seit ich auf SO gewesen bin so Entschuldigungen für die späte Antwort :) –

Verwandte Themen