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ć?
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. Nigdy tego nie używałem, ale jeżeli dobrze rozumiem opis to jest własnie to czego szukasz
[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. 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!!