Skip to content

A simple gem for adding (native) UUIDs to ActiveRecord

License

Notifications You must be signed in to change notification settings

timabdulla/acts_as_uuid

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

A simple gem for adding (native) UUIDs to ActiveRecord

Resources

License

Stars

Watchers

Forks

Packages

No packages published