this is not a normal use case where i could use sth like paper_trail or other plugins, it’s a more complex approach to keep track changes… but let me explain:
Let’s assume you have an medical calendar with appointments, an doctor in charge and client.
Let’s assume you are Bill, and you are in charge of planning the schedule for the next couple of weeks. After settung up all those hundreds of appointments for the next month you send out the schedule to your doctors and clients.
Obviously if you plan 4 weeks ahead, there will be changes in your original schedule (you switch a doctor because one got sick, a client died, you change the start time of an appointment etc.)
So, you need to send an updated of the schedule. But obviously you want to send an email only to those clients or doctors how are affected from those changes in the schedule.
What you need to figure out is:
- new appointments ?
- changed appointments?
- canceled appointments?
Looks fairly simple at first, you could just remember the timestamp where you send the schedule the last time and then keep track changes with after_save, after_destroy callbacks.
Unfortunatly this will also result in some tricky cases, e.g. you remove a doctor, and add the same doctor again to that appointment. you get 2 changes which are obviously no “real” changes.
What i like to have is seperate table where i store those changes, reviews them later on and send those out to the doctors and clients.
I’m really curious if someone did a similar thing, or has an nice approach how to solve this problem. 🙂
Thanks !
The easiest way for observing state changes is rather simple: use a log file. In your case it’s going be a log file on steroids, a model, with attributes like:
user_to_update,date_changed,notified_ok.You can trigger a new log insert every time you make changes and retrieve statistics from your log model.