Jeśli chcesz utworzyć user_idtabelę, 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:migratezarówno user_idkolumna, jak i indeks zostaną dodane do productstabeli.
W przypadku wystarczy dodać indeks do istniejącej kolumny, na przykład namez usertabeli, 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_columnlinię i uruchom migrację.
W opisanym przypadku można było wydać rails generate migration AddIndexIdToTable index_id:integer:indexpolecenie, a następnie usunąć add_columnwiersz 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