Si necesita crear una user_id
, sería razonable suponer que está haciendo referencia a una tabla de usuarios. En cuyo caso la migración será:
rails generate migration AddUserRefToProducts user:references
Este comando generará la siguiente migración:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Después de ejecutar rake db:migrate
tanto una user_id
columna como un índice, se agregarán a la products
tabla.
En caso de que solo necesite agregar un índice a una columna existente, por ejemplo, name
de una user
tabla, la siguiente técnica puede ser útil:
rails generate migration AddIndexToUsers name:string:index
generará la siguiente migración:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
Elimina la add_column
línea y ejecuta la migración.
En el caso descrito, podría haber emitido un rails generate migration AddIndexIdToTable index_id:integer:index
comando y luego eliminar la add_column
línea de la migración generada. Pero prefiero recomendar deshacer la migración inicial y agregar una referencia en su lugar:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references