Rails has an amazing number of quality libraries (called ‘gems’) and while building The Food Corridor application, I was lucky enough to be able to use some of them.
If you want to easily track changes in your rails models over time, the paper_trail gem has you covered. Simple to install, compatible with many databases, and very easy to use. I’d point you to the docs for installation, but for usage, all you have to do is drop
has_paper_trail into your model class.
After that’s deployed, every change to those models is tracked, including the entire model state. From an operational perspective, I’m a bit worried about the size of the audit table (called
versions), but thus far it hasn’t grown too fast. It wouldn’t be hard to prune either.
I use the data this gem records for two reasons. The primary purpose is to debug the system. When there’s an issue because the system doesn’t act as expected, or a question on when a model changed, I can go back and see how the model has changed over time. I can do this either by directly inspecting the
versions table or via the rails console. If I use the latter, then I can actually pull back the model object as it existed in the past. This has been tremendously helpful in tracking down bugs.
The secondary use of this data is to allow the system to see changes over time, and execute code based on those changes. This doesn’t happen often, and I’d prefer for such changes to be captured more explicitly, but in at least one case this gem has allowed me to fix an issue in a time efficient manner.
If you’re building a complicated system that changes over time, as most real world applications do, having some kind of audit trail can be extremely helpful.
paper_trail makes it trivial to get an audit trail set up in your rails app.