= GoldRecord * http://github.com/ydnar/gold-record * http://gemcutter.org/gems/gold-record * mailto:randy@shaderlab.com == DESCRIPTION GoldRecord is an extension for ActiveRecord that implements unobtrusive binary UUIDs[http://en.wikipedia.org/wiki/Universally_Unique_Identifier] in MySQL. == FEATURES * Uses space-efficient 16-byte binary representation for UUIDs. * Works with associations, migrations and ActiveRecord::SchemaDumper. * Transparently converts to/from hex-encoded UUIDs in #to_param and #find. GoldRecord supports SchemaDumper by not declaring the id column a PRIMARY KEY. The odds of a random UUID collision are documented here[http://en.wikipedia.org/wiki/Universally_Unique_Identifier#Random_UUID_probability_of_duplicates]. == SYNOPSIS class Blog < ActiveRecord::Base acts_as_gold_record has_many :posts end class Post < ActiveRecord::Base acts_as_gold_record end === Or, for the exceptionally paranoid: class LargeHadron < ActiveRecord::Base acts_as_gold_record set_primary_key :lottery_number validates_uniqueness_of :lottery_number, :on => :create end == MIGRATIONS class MakeGoldRecords < ActiveRecord::Migration def self.up # Change each int(11) id column to binary(16). # This preserves the column’s original value as a right-padded 16-byte string. [:labels, :record_stores].each do |table| change_integer_primary_key_to_uuid(table) add_index table, :id end # Change association columns to binary(16). [ [:artists, :label_id, :id], [:labels_record_stores, :label_id, false], [:labels_record_stores, :record_store_id, false], [:artists_record_stores, :record_store_id, false], ].each do |table, column, primary_key| change_integer_to_uuid(table, column, primary_key) end end # Down migration designed to be run immediately after an up migration # in the event of some failure. Running this after generating any UUIDs # will produce unpredictable results. def self.down # Change each binary(16) id column to int(11). # MySQL casts the string value to an integer. [:labels, :record_stores].each do |table| remove_index table, :id change_uuid_to_integer_primary_key(table) end # Change association columns to int(11). [ [:artists, :label_id, :id], [:labels_record_stores, :label_id, false], [:labels_record_stores, :record_store_id, false], [:artists_record_stores, :record_store_id, false], ].each do |table, column| change_uuid_to_integer(table, column, primary_key) end end end == INSTALL === As a gem: [sudo] gem install gold-record === As a Rails plugin: Clone/copy to vendor/plugins/gold_record.