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.
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.
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.
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.
class Email < ActiveRecord::Base
include ActsAsUUID
uuid_on :id, :as => :primary_key
end
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.
class Email < ActiveRecord::Base
include ActsAsUUID
uuid_on :guid
end
- 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.
See LICENSE