A simple gem for adding (native) UUIDs to ActiveRecord
Ruby Shell
Switch branches/tags
Latest commit 0ce4a1a Dec 6, 2012 @caius caius Adding to travis
Permalink
Failed to load latest commit information.
lib
script
spec
.gitignore
.travis.yml
Gemfile
LICENSE
README.md
Rakefile
acts_as_uuid.gemspec

README.md

ActsAsUUID

Adds (native) UUID support, including support for primary keys and associations , to your ActiveRecord models. Currently only supports PostgreSQL.

Inspired by https://github.com/jashmenn/activeuuid and the lack of PostgreSQL gems that worked.

Installation

Add this to your Gemfile:

gem "uuid"
gem "acts_as_uuid"

You can now set the type uuid for an attribute in your models.

NB: We don't depend on uuid gem because you can use any gem that provides UUID.generate, such as the cuuid gem.

Example: Adding a UUID primary key to your models

Step 1a: For new models

class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
  def self.change
    create_table :emails, :id => false  do |t|
      t.uuid :id, :unique => true
    end
    add_index :emails, :id
  end
end

Don't forget: You will also need to change any foreign keys to the uuid type.

Step 1b: Migrating existing models

For existing models just add:

class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
  def self.change
    remove_column :emails, :id
    add_column :emails, :id, :uuid
    add_index :emails, :id
  end
end

Keep in mind: after this all your UUIDs will be set to nil.

Step 2: Extend your model to auto generate UUIDs for a field

class Email < ActiveRecord::Base
  include ActsAsUUID
  uuid_on :id, :as => :primary_key
end

Example: Adding a UUID as a separate field

Step 1: Migrate a model

class AddUUIDPrimaryKeyToEmail < ActiveRecord::Migration
  def self.change
    add_column :emails, :guid, :uuid
    add_index :emails, :guid, :unique => true
  end
end

Keep in mind: after this all your UUIDs will be set to nil.

Step 2: Extend your model to auto generate UUIDs for a field

class Email < ActiveRecord::Base
  include ActsAsUUID
  uuid_on :guid
end

Important notes

  • Currently only supports 1 field to be set to auto generate a UUID
  • Integers can't be migrated to UUIDs without losing data
  • If you use a UUID as a primary key you will lose some ActiveRecord features like: .first, .find_each and .find_in_batches. Basically any method that requires the ID to be sorted as an integer.

License

See LICENSE