Se você precisar criar um user_id, seria razoável supor que você está referenciando uma tabela de usuário. Nesse caso, a migração será:
rails generate migration AddUserRefToProducts user:references
Este comando irá gerar a seguinte migração:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Depois de executar, rake db:migrateuma user_idcoluna e um índice serão adicionados à productstabela.
Caso você precise apenas adicionar um índice a uma coluna existente, por exemplo, namede uma usertabela, a seguinte técnica pode ser útil:
rails generate migration AddIndexToUsers name:string:index irá gerar a seguinte migração:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Excluir add_column linha e execute a migração.
No caso descrito, você poderia ter emitido o rails generate migration AddIndexIdToTable index_id:integer:indexcomando e, em seguida, excluir a add_columnlinha da migração gerada. Mas eu prefiro recomendar desfazer a migração inicial e adicionar referência em vez disso:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references