views:

583

answers:

4

I'm looking for a plugin/act to allow versioning of my models. It's kind of difficult to find a list of the available solutions. So far I gathered:

  • acts_as_versioned
  • simply_versioned
  • vestal_versions

The last two solutions only require a single version table - this sounds nice, but I've got a bad feeling about how the ease of migrations will be affacted by this (because they serialize states as a string).

On the other hand, acts_as_versioned is a little bit dusty (last commit in January). Are there any recent experiences with any of these? Or other solutions (or forks) I might have overlooked?

+2  A: 

A couple of months ago I tested a couple of solutions and vestal_versions was the most effective. There's also a great screencast here from Ryan Bates.

If you are looking for other alternatives, check out The Ruby Toolbox list.

Simone Carletti
Indeed, it seems to be the most advanced one. Maybe I'm wrong about how it handles migrations, I'll do some tests. And thanks for the Toolbox link!
Marcel J.
+1  A: 

We used acts_as_audited in a project, with quite a good success.

You can find that at http://github.com/collectiveidea/acts%5Fas%5Faudited/

(last commit in november :-) )

tal
Looks promising - i'll take a look at it.
Marcel J.
+1  A: 

I've worked with vestal_versions last week and yes, it is the most advanced alternative, at least in terms of space: you store just what you really need. It is an active project and the version 1.0 is going to be a huge update with many new features; just look at the 1.0 branch to know what I mean.

But after playing with it a bit, I've noticed a big flaw: performance. Every time you need an specific version, you have to go through all intermediate ones, reconstructing the version you need. This also means you cannot edit or delete a version directly, because it can mess with modifications, broking the chain. For do this, you need to process versions adequately, what vestal_versions currently does not do.

This way, for the problem I had, I ended up with my own versioning solution. I needed performance and the ability to delete and edit versions rapidly, so I sacrificed storage and developed something similiar to act_as_versioned.

BUT, if you don't need this and do not have to revert very frequently, I highly recommend vestal_versions. It is an advanced, solid solution and an active one, with a passionate developer behind it.

Lailson Bandeira
I took a look at all the solutions (paper trail, acts_as_audited) and finally chose to go the same way as Lailson - to develop yet another versioning plugin (sirlantis/historical at github, work in progress).
Marcel J.
Just to clarify: I did not build a library, I just make a custom solution for my problem. But good luck with the plugin. I see you did a lot of things really fast, with nice documentation. It looks promising… I'm interested on this matter and I'll keep watching your project.
Lailson Bandeira
+7  A: 

Hey,

Ive been working with a gem called "paper_trail". It seems to be the best solution online at the moment. It has auditing and version control in one.

http://github.com/airblade/paper_trail

Hope this helps!

Ryan