Si vous avez besoin de créer un, user_id
il serait raisonnable de supposer que vous référencez une table utilisateur. Dans ce cas, la migration sera:
rails generate migration AddUserRefToProducts user:references
Cette commande générera la migration suivante:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Après avoir exécuté à la rake db:migrate
fois une user_id
colonne et un index seront ajoutés à la products
table.
Dans le cas où vous avez juste besoin d'ajouter un index à une colonne existante, par exemple name
d'une user
table, la technique suivante peut être 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
Supprimez la add_column
ligne et exécutez la migration.
Dans le cas décrit, vous auriez pu lancer une rails generate migration AddIndexIdToTable index_id:integer:index
commande puis supprimer la add_column
ligne de la migration générée. Mais je recommande plutôt d'annuler la migration initiale et d'ajouter une référence à la place:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references