Jeśli chcesz utworzyć user_id
tabelę, rozsądne byłoby założenie, że odwołujesz się do tabeli użytkownika. W takim przypadku migracja będzie:
rails generate migration AddUserRefToProducts user:references
To polecenie wygeneruje następującą migrację:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Po uruchomieniu rake db:migrate
zarówno user_id
kolumna, jak i indeks zostaną dodane do products
tabeli.
W przypadku wystarczy dodać indeks do istniejącej kolumny, na przykład name
z user
tabeli, następujące techniki mogą być pomocne:
rails generate migration AddIndexToUsers name:string:index
wygeneruje następującą migrację:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Usuń add_column
linię i uruchom migrację.
W opisanym przypadku można było wydać rails generate migration AddIndexIdToTable index_id:integer:index
polecenie, a następnie usunąć add_column
wiersz z wygenerowanej migracji. Ale wolałbym raczej cofnąć początkową migrację i zamiast tego dodać odwołanie:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references