2012-09-23 19 views
14

Mam aplikację Rails, w której jeden z modeli nie ma kolumny id. Robi rozeznanie znalazłem migracji, które ją przygotować:Dodaj kolumnę Id w migracji

create_table(:the_model, :id => false) do |t| 
    # columns 
end 

Teraz na nowej migracji, chcę dodać kolumnę id w Rails standardowy sposób (nie używając konkretnej bazy danych SQL). Jak mogę to zrobić?

Próbowałem już to bez powodzenia:

change_table(:the_model, :id => true) do |t| 
end 

Odpowiedz

31

Można ręcznie dodać kolumnę ID:

add_column :table_name, :id, :primary_key 

lub jasne (lub kopia zapasowa) dane, wycofywania do tej migracji, pozbyć z opcji :id => false i ponownej migracji.

+0

Komenda zadziałała! Chociaż w końcu udało mi się odtworzyć tabelę ('drop_table' i' create_table' w migracji), ponieważ miał już klucz podstawowy. Wielkie dzięki! – alf

+0

To też działa! Nie ma problemu. – cdesrosiers

+2

Po uruchomieniu migracji kolumna id istniejących rekordów zostanie automatycznie wypełniona unikatowymi wartościami id? Jeśli nie, w jaki sposób/jak je przypisać, aby system był szczęśliwy? –

5

macie już odpowiedź, ale tutaj jest jeden liner, że robi wszystko w tym przypadku

rails generate migration AddIdToModel id:integer 

Spójrz na składni nazwy pliku migracji Dodaj NazwaKolumny Aby TableName następuje opis kolumn. To wygeneruje coś jak poniżej

class AddIdToModel < ActiveRecord::Migration 
    def change 
    add_column :models, :id, :integer 
    end 
end 

Teraz można zmienić tę linię, jeśli czujesz się na nic innego. i po prostu uruchom rake db:migrate.

+3

'rails g migration add_id_to_model id: primary_key' robiący wszystko dla ciebie – dubadub

2

Nie trzeba wspomnieć :integer

rails g migration add_id_to_model id:primary_key pracował dla mnie.

Powiązane problemy