2016-12-06 11 views
1

Там, кажется, не будет много документации по UUID с в Rails 5. Все, что я нашел этот код:Rails 5-Как добавить UUID колонку

create_table :users, id: :uuid do |t| 
    t.string :name 
end 

Это отлично работает, если вы создание таблицы, но что делать, если вы обновляете уже существующую таблицу?

Как вы работаете a UUID колонка на стол?

+0

Вот ответы, проверить его. https://stackoverflow.com/a/43245416/6059387 –

ответ

1

Чтобы перенастроить по умолчанию идентификатор использовать UUID, попытайтесь писать миграции, как это:

class ChangeProjectsPrimaryKey < ActiveRecord::Migration 
    def change 
    add_column :projects, :uuid, :uuid, default: "uuid_generate_v4()", null: false 

    change_table :projects do |t| 
     t.remove :id 
     t.rename :uuid, :id 
    end 

    execute "ALTER TABLE projects ADD PRIMARY KEY (id);" 
    end 
end 
+2

Я получил это, но это не сработало, миграция останавливается и показывает эту ошибку: 'Mysql2 :: Ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с uuid DEFAULT uuid_generate_v4() «NOT NULL» в строке 1: ALTER TABLE 'projects' ADD 'new_id' uuid DEFAULT 'uuid_generate_v4()' NOT NULL ' – Mirror318

+2

Это не работает с MySQL. MySQL не определяет функцию uuid_generate_v4 и не позволяет использовать функцию в DEFAULT (требуется постоянная). – januszm

0

Вот как добавить uuid столбец в существующую таблицу Rails.

class AddUuidToContacts < ActiveRecord::Migration[5.1] 
    def change 
    enable_extension 'uuid-ossp' # => http://theworkaround.com/2015/06/12/using-uuids-in-rails.html#postgresql 
    add_column :contacts, :uuid, :uuid, default: "uuid_generate_v4()", null: false 
    execute "ALTER TABLE contacts ADD PRIMARY KEY (uuid);" 
    end 
end 

Если вы забыли добавить enable_extension 'uuid-ossp', вы получите эти ошибки:

PG::UndefinedFunction: ERROR: function uuid_generate_v4() does not exist ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: function uuid_generate_v4() does not exist