Si vous devez créer un user_id
alors il serait raisonnable de supposer que vous faites référence à une table utilisateur. Dans ce cas, la migration doit être :
rails generate migration AddUserRefToProducts user:references
Cette commande va générer la migration suivante :
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Après avoir exécuté rake db:migrate
à la fois user_id
et un index sera ajouté à la colonne products
table.
Dans le cas où vous avez juste besoin d'ajouter un index à une colonne existante, par ex. name
d'un user
la technique suivante peut s'avérer utile :
rails generate migration AddIndexToUsers name:string:index
générera la migration suivante :
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Supprimer add_column
et lancer la migration.
Dans le cas décrit, vous auriez pu émettre rails generate migration AddIndexIdToTable index_id:integer:index
et ensuite supprimer add_column
de la migration générée. Mais je préfère recommander d'annuler la migration initiale et d'ajouter la référence à la place :
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references