Search code examples
ruby-on-railsmigrationrails-migrations

Rails 4. Migrate table id to UUID


I have a table: db/migrate/20140731201801_create_voc_brands.rb:

class CreateVocBrands < ActiveRecord::Migration
  def change
    create_table :voc_brands do |t|
      t.string :name

      t.timestamps
    end
  end
end

But I need to change table to this(if I would create it from zero):

class CreateVocBrands < ActiveRecord::Migration
  def change
    create_table :voc_brands, :id => false do |t|
      t.uuid :id, :primary_key => true
      t.string :name

      t.timestamps
    end
    add_index :voc_brands, :id
  end
end

How can I change this using migration?


Solution

  • I had the same problem as yours. To migrate from default id to use uuid, I think you could something similar to what I had:

    class ChangeVocBrandsPrimaryKey < ActiveRecord::Migration
      def change
        add_column :voc_brands, :uuid, :uuid, default: "uuid_generate_v4()", null: false
    
        change_table :voc_brands do |t|
          t.remove :id
          t.rename :uuid, :id
        end
        execute "ALTER TABLE voc_brands ADD PRIMARY KEY (id);"
      end
    end