Object Version Control, or at least edit log

Hello all,

I need to create a object history, as I'll have multiple editors for a site i am working on. Of course it would be great to have the ability to restore an object to its state and undo the damage due to a bad editor, but I'll settle for a system that will tell me who to blame.

Basically I want to track who changed what on what object. I would like your input on the best way to do this, or someone to stop me if its already been done.

My first thought, was to simply make the activity log and log the "self.changed.to_yaml" to the database, but I would like more information then that if possible, adding this along with the "self.to_yaml" would provide semi-readable output on the changed values but no details on the original values.

I would, if at all possible like to make it a bit more detailed, but right now I'm looking for someone with a bit more experience in AR to provide me with some tips/tricks.

Thanks, Brian

There's http://wiki.github.com/collectiveidea/acts_as_audited/. That might work for your use case.

Also might want to check out different database solutions - CouchDB for instance has versioning built-in for all documents.

Erol Fornoles wrote:

That looks like what I was planning on doing, but a little light on the changed details.

Unless anyone has any other suggestion I'll just have to write my own.

Brian

PsiPro wrote:

That looks like what I was planning on doing, but a little light on the changed details.

What are you referring to? Please quote when replying; we can't read your mind. :slight_smile:

Unless anyone has any other suggestion I'll just have to write my own.

There are others -- for example, acts_as_versioned . You might want to see which one Redmine uses. You probably don't have to write your own.

Brian

Best,

You may want to take a look at vestal_versions:

http://github.com/laserlemon/vestal_versions

Haven't used it myself, but looks to be able to revert objects to pretty much any previous version *and* show what changed between arbitrary pairs of versions.

--Matt Jones

Matt Jones wrote:

You may want to take a look at vestal_versions:

GitHub - laserlemon/vestal_versions: Keep a DRY history of your ActiveRecord models' changes

Haven't used it myself, but looks to be able to revert objects to pretty much any previous version *and* show what changed between arbitrary pairs of versions.

--Matt Jones

Ooh, thanks! I'm writing a medical records app, so I'm likely to need this soon.

Best,

You may want to take a look at vestal_versions:

GitHub - laserlemon/vestal_versions: Keep a DRY history of your ActiveRecord models' changes

Haven't used it myself, but looks to be able to revert objects to pretty much any previous version *and* show what changed between arbitrary pairs of versions.

--Matt Jones

I have to agree, that looks great. Thanks for the link.

Brian

You may want to take a look at vestal_versions:

GitHub - laserlemon/vestal_versions: Keep a DRY history of your ActiveRecord models' changes

Haven't used it myself, but looks to be able to revert objects to pretty much any previous version *and* show what changed between arbitrary pairs of versions.

--Matt Jones

So I looked into Vestal Versions and it appears there is an issue with it using the class name Tag

I already have a tagging and tags relationship and their use of those names is causing problems with Thinking Sphinx and Formtastic

When thinking sphinx tries to index tag_ids, or when formtastic queries the tag relationship its talking to the VestalVersions model, which doesn't talk like a normal relationship. I end up with the following error:

"`reflect_on_association' for VestalVersions::Tagging:Module"

If I remove thinking sphinx's index on tag_ids it will be all fine and dandy until formtastic throws the same error.

Brian