Jeśli trzeba utworzyć user_id
wtedy byłoby rozsądnym założeniem, że odwołujesz się do tabeli użytkowników. W tym przypadku migracji następuje:
rails generate migration AddUserRefToProducts user:references
Polecenie generować następujące migracji:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Po uruchomieniu rake db:migrate
zarówno kolumnę i indeks zostanie dodany do product
tabeli.
W przypadku, gdy wystarczy dodać indeks do istniejącej kolumny, np. name
z user
tabeli następujące technika może być pomocne:
rails generate migration AddIndexToUsers name:string:index
wygeneruje następujący migracji:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Usuń add_column
linii i uruchom migrację.
W opisanym przypadku można było wydać polecenie rails generate migration AddIndexIdToTable index_id:integer:index
, a następnie usunąć linię add_column
z wygenerowanej migracji. Ale wolałbym zaleca się cofnąć wstępnej migracji i dodać odniesienie zamiast:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references
Po prostu uruchamiam w mojej konsoli: szyny generują migrację AddIndexToTable? – user1611830
Tak, możesz to zrobić, ale potem będziesz musiał edytować tę migrację, aby odzwierciedlić powyższy kod. –
tak, dziękuję! – user1611830