Se è necessario creare un user_id, sarebbe ragionevole presumere che si faccia riferimento a una tabella utente. In tal caso la migrazione sarà:
rails generate migration AddUserRefToProducts user:references
Questo comando genererà la seguente migrazione:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Dopo aver eseguito rake db:migratesia una user_idcolonna che un indice verranno aggiunti alla productstabella.
Nel caso in cui sia necessario aggiungere un indice a una colonna esistente, ad esempio nameuna usertabella, la seguente tecnica può essere utile:
rails generate migration AddIndexToUsers name:string:index genererà la seguente migrazione:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Elimina la add_columnriga ed esegui la migrazione.
Nel caso descritto avresti potuto emettere il rails generate migration AddIndexIdToTable index_id:integer:indexcomando e poi cancellare la add_columnriga dalla migrazione generata. Ma preferirei piuttosto annullare la migrazione iniziale e aggiungere invece il riferimento:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references