Historia zmian

Witam, potrzebuję zrobić w jakiś sposób historię zmian grup wierszy (nie tylko pojdedynczego) w bazie.
Mam dwie tabelki A i B z relacją many-to-many bez pośredniczącego modelu (tylko tabelka A_B). Zmiany w tabelce B mogą być dowonle - zmiany w wielu kolumnach, dodawanie/usuwanie wierszy z asocjacji (zawsze conajmniej jeden wymagany). Chciałbym mieć całą historie tych zmian z łatwym dostępem do stanu po każej z nich (a nawet wyświetlić całą).
Mój pierwszy pomysł był taki, żeby po każdej modyfikacji do tabelki B zawsze wrzucać zawsze nowe wiersze, a istniejącym nadać numer wersji i przenieść je do nowej tabelki B_history o podobnej strukturze do B. Wiem, że tabelka może się szybko rozrosnąć, ale z drugiej strony nie musze robić żadnych akrobacji, żeby pokazać całą historię zmian.
Macie jakieś uwagi do takiego podejścia? A może całkiem inaczej można sie za to zabrać?:wink:

Przejrzyj te gemy, może któryś będzie Ci odpowiadał: http://agilewebdevelopment.com/plugins/search?q=revision

Hmmm dzieki za trop, ale chyba z tej listy nic nie wybiorę - na pierwszy rzut oka żaden z gemów nie oferuje wyświetlania historii, a tylko save/restore itp. Może coś innego się tam jeszcze znajdzie:)

Pierwszy z brzegu acts_as_revisionable:

[quote]Restoring Revisions

You can restore revisions into an object in memory by calling restore_revision with the revision number. This will return a new object with all the attributes and associations restored from the revision record. The object will not have been saved yet to the database.[/quote]
restore_revision pobierze poprzednie wersje rekordu (które możesz wyświetlić właśnie jako historię), ale nie zapisuje ich do bazy. :wink: Nigdy tego nie używałem, ale jeżeli dobrze rozumiem opis to jest własnie to czego szukasz :slight_smile:

paper_trail FTW! :slight_smile:

[quote=zlw]Pierwszy z brzegu acts_as_revisionable:

[quote]Restoring Revisions

You can restore revisions into an object in memory by calling restore_revision with the revision number. This will return a new object with all the attributes and associations restored from the revision record. The object will not have been saved yet to the database.[/quote]
restore_revision pobierze poprzednie wersje rekordu (które możesz wyświetlić właśnie jako historię), ale nie zapisuje ich do bazy. :wink: Nigdy tego nie używałem, ale jeżeli dobrze rozumiem opis to jest własnie to czego szukasz :)[/quote]
Zgadza się, nie wczytałem się dokładnie;)

Bardzo konkretne i będę pamiętał, a póki co, dla celów poznawczych zrobię to pewnie na piechotę;) Jedną rzecz sobie uświadomiłem przyglądając się tym gemom, że nie muszę robić kopii struktury tabelki tylko skorzystać z Marshal#dump tak jak acts_as_revisionable robi. Jedna wersja -> jeden wiersz, to mi wystarczy:) Dzięki!!:slight_smile: