Obecnie próbuję zaimplementować dziennik dla sekcji administracyjnej aplikacji mojej szyny. Umożliwi to administratorowi zobaczenie, jakie akcje wykonał użytkownik i kiedy. Np. "Użytkownik dodał nowy adres", "Użytkownik zaktualizował swój kod pocztowy z X na Y".Zachowaj dziennik zdarzeń użytkownika w szynach
Ponieważ każde działanie może potencjalnie obejmować wiele modeli, nie tylko użytkownika, stworzyłem model dziennika, który zawiera pola dla wszystkich pozostałych identyfikatorów modeli systemowych, wiadomości i kodu logu.
class CreateLogs < ActiveRecord::Migration
def self.up
create_table :logs do |t|
t.integer :user_id
t.integer :marker_id
t.integer :administrator_id
t.integer :group_id
t.integer :assignment_id
t.integer :submission_id
t.integer :code
t.text :message
t.timestamps
end
end
def self.down
drop_table :logs
end
end
Moim problemem jest to, że na przykład, użytkownik może (powiedzmy) dodać zadanie do swojego konta, to zostanie zarejestrowane jako
Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')
(Gdzieś kod 342 odpowiada „Użytkownik utworzony nowy adres ", więc nie ma potrzeby przesyłania wiadomości)
Oczywiście w widoku dziennika mogę wyciągnąć odpowiednie informacje o użytkowniku i adresie z logów ids/details, ale jeśli ten użytkownik lub adres miał zostać usunięty, wszystkie te informacje być niedostępne i tak przeglądając logi, wpis byłby podstawowy y bezużyteczny.
Musi istnieć lepszy sposób lub coś, co pomoże już rejestrować takie zdarzenia systemowe i poradzić sobie z ewentualnymi usunięciami.
Ewentualnie mogę zapisać cały wpis jako wiadomość tekstową, ale czy nie byłoby to naprawdę złe i niepotrzebnie zapełniać bazę danych?
Daj mi znać, jeśli coś z tego jest niejasne, po prostu wymyślone działania/zdarzenia aplikacji do logowania musiały zostać wykonane wcześniej!
Dzięki,
Pete
To wygląda obiecująco, szczególnie jak ślad papieru, ale może zapisać tylko jedną wersję/log, gdy model zostanie zmieniony, prawda? Co zrobić, jeśli chcę ręcznie określić każdą zmianę osobno? Lub jeśli jest wykonana czynność, która niekoniecznie zmienia model, ale robi coś innego, jak wysłanie e-maila? –
Tak, wersja/audyt jest zwykle wyzwalana tylko przez zmiany w rekordach. Jeśli chcesz rejestrować akcje niestandardowe, które niekoniecznie powodują zmianę bazy danych, musisz utworzyć własny program rejestrujący. – eugen