2016-12-06 4 views
1

hinzuzufügen ist es nicht zu viel Dokumentation auf UUID s in Rails 5. scheinen Alles, was ich gefunden habe, ist dieser Code:Rails 5-How UUID Spalte

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

Das funktioniert gut, wenn Sie Erstellen einer Tabelle, aber was passiert, wenn Sie eine bereits vorhandene Tabelle aktualisieren?

Wie fügen Sie eine UUID Spalte zu einer Tabelle hinzu?

+0

Hier die Antworten ist, check it out. https://StackOverflow.com/a/43245416/6059387 –

Antwort

1

Um von Standard-ID zu migrieren UUID zu verwenden, versuchen Migration wie folgt zu schreiben:

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

Ich habe das, aber es hat nicht funktioniert, die Migration stoppt und zeigt diesen Fehler: 'Mysql2 :: Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, für die richtige Syntax in der Nähe von 'uuid DEFAULT' uuid_generate_v4() 'NOT NULL' in Zeile 1: ALTER TABLE 'projects' ADD 'neue_id' uuid DEFAULT 'uuid_generate_v4()' NOT NULL ' – Mirror318

+2

Dies funktioniert nicht mit MySQL. MySQL definiert weder die Funktion uuid_generate_v4, noch erlaubt sie die Verwendung der Funktion in DEFAULT (erfordert Konstante). – januszm

0

Hier ist, wie eine uuid Spalte zu einer vorhandenen Rails Tabelle hinzuzufügen.

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 

Wenn Sie enable_extension 'uuid-ossp' hinzufügen vergessen, können Sie diese Fehler erhalten werden:

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