I’ve had some joy with Paper Trail. One thing I wanted in particular was to roll back changes based on time. So for example, a Post has many Comments, I want to rollback the Post to 1 day earlier and both revert any changes to the post and delete any comments that had been done subsequently. You could get the associated child objects and resave them something like
post = Post.find(@version.item_id)
reified_post = @version.reify(:has_many => true)
new_comments = reified_post.comments.to_a
post.comments = new_comments
I suppose the comments existed in the db, but were not associated to a post.