Keeping DRY - I like a simple life!

In your Versionable module:

def self.included(klass)
   versioned_class = klass.name + 'Version'
   klass.send(:has_many, :versions, :class_name => versioned_class,
              :foreign_key =>"parent_id")
   klass.send(:belongs_to :curr, :class_name => versioned_class,
              :foreign_key => "current_id")
   klass.send(:belongs_to :unapproved, :class_name => versioned_class,
              :foreign_key => "unapproved_id")
end

Make sense?

http://ruby-doc.org/core/classes/Module.html#M000743

But don't dare forget the commas, like I did.

The correct version:

def self.included(klass)
   versioned_class = klass.name + 'Version'
   klass.send(:has_many, :versions, :class_name => versioned_class,
              :foreign_key =>"parent_id")
   klass.send(:belongs_to, :curr, :class_name => versioned_class,
              :foreign_key => "current_id")
   klass.send(:belongs_to, :unapproved, :class_name => versioned_class,
              :foreign_key => "unapproved_id")
end