Come salvare data e ora di un cambiamento all’interno di un modello
Oggi mi è capitato di dover tenere traccia della data di cambiamento di un campo all’interno di un modello (ad esemio di nome Service). Supponiamo di avere un field booleano chiamato opened che indica lo stato di apertura o di chiusura di un servizio. Per memorizzare all’interno del database il momento dell’avvenuto cambiamento aggiungete un campo datetime chiamato changed_at e scrivete la seguente funzione all’interno del modello:
1 # Variazione dello stato del servizio 2 3 super(arg) 4 self.changed_at = Time.now 5 end
Nel momento in cui aggiornate il campo opened automaticamente sarà salvata la data corrente della variazione. Infatti eseguendo il codice:
1 Service.update_attribute(:opened, true)
Vi troverete automaticamente variata la data all’interno del campo changed_at. Questo risulta utile soprattutto nel momento in cui dovete aggiungere la funzionalità ad un’applicazione in stato avanzato di sviluppo, dato che in qualsiasi parte dell’applicazione venga variato lo stato di opened si ha automaticamente l’aggiornamento dell’ora nel campo senza altri interventi di codice.

