Skip to content
A simple gem for adding (native) UUIDs to ActiveRecord
Ruby Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
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

You can’t perform that action at this time.