2009-04-15 26 views
1

Ich bin auf der Suche nach einigen Ideen zum Speichern eines Snapshots einiger (unterschiedlicher) Datensätze zum Zeitpunkt eines Ereignisses, zum Beispiel Benutzer ein Dokument aus meiner Anwendung, so dass dieses Dokument kann später regeneriert werden. Welche Strategien empfehlen Sie? Sollte ich die gleiche Tabelle wie die Tabelle mit aktuellen Werten verwenden oder eine historische Tabelle verwenden? Kennst du irgendwelche Plugins, die mir bei der Aufgabe helfen könnten? Bitte teile deine Gedanken und Lösungen.Techniken zum Speichern/Abrufen von historischen Daten in Rails

Antwort

2

Ich habe das einmal eine Weile zurück. Wir haben eine neue Tabelle, die eine sehr ähnliche Struktur auf dem Tisch hatten wir anmelden wollten, und wenn wir etwas einzuloggen benötigt, haben wir etwas Ähnliches wie folgt aus:

attr = object_to_log.attributes 
# Remove things like created_at, updated_at, other unneeded columns 
log = MyLogger.new(attrs) 
log.save 

Es gibt eine sehr gute Chance, es Plugins/Edelsteine so etwas zu tun.

2

Ich habe acts_as_versioned für solche Sachen verwendet.

+0

Ihr Link funktioniert nicht richtig. Es fordert mich stattdessen auf diesen Link zu gehen: http://github.com/technoweenie/acts_as_versioned/tree/master – MattC

+0

Wie seltsam - das ist die genaue URL in der Verknüpfung. Wenn Sie in der Adressleiste auf der 404-Seite erneut auf "Return" klicken, wird es an der richtigen Stelle angezeigt. Github macht heute eine Veröffentlichung, also vermute ich, dass sich die Dinge beruhigen werden. –

3

Dafür gibt es mehrere Plugins.

Acts_audited 

agiert als überwacht Erstellt eine einzelne Tabelle für alle auditierbaren Objekte und erfordert keine Änderungen an Ihren vorhandenen Tabellen. Sie erhalten den Eintrag pro Änderung mit den Änderungen, die als Hash in einem Memofeld gespeichert sind, die Art der Änderung (CRUD). Es ist sehr einfach, nur mit einer einzigen Anweisung im Application Controller zu konfigurieren, welche Modelle überwacht werden sollen. Rollback ist an Ihnen, aber die Informationen sind da. Da die gespeicherten Informationen nur die Änderungen sind, die das gesamte Objekt aufbauen, kann es aufgrund nachfolgender Änderungen schwierig sein.

Acts_as_versioned 

ein bisschen komplizierter Sie benötigen eine separate Tabelle Setup- für jedes Objekt, das Sie auf die Version wollen und Sie haben eine Version-ID, um Ihre bestehenden Tabelle hinzuzufügen. Rollback ist sehr einfach. Es gibt Gabeln auf Github, die einen Hash der Änderungen seit der letzten Version bieten, so dass Sie die Unterschiede leicht hervorheben können (es ist was ich verwende). Meine Vermutung ist, dass dies die beliebteste Lösung ist.

Ich habe keine Erfahrung mit: acts_as_revisable. Ich werde wahrscheinlich das nächste Mal ausprobieren, wenn ich die Versionierung brauche, da sie viel ausgeklügelter aussieht.

0

Das OP ist ein Jahr alt, aber ich dachte, ich würde vestal_versions zu der Mischung hinzufügen. Es verwendet eine einzige Tabelle, um serialisierte Hashes jeder Version zu verfolgen. Durch das Verfolgen der Änderungsaufzeichnung können die Modelle auf einen beliebigen Zeitpunkt zurückgesetzt werden.

Scheint, der Gemeinschaftsfavorit von diesem Pfosten zu sein ...

Verwandte Themen