ruby-on-rails - remove - rollback migration rails
Migración de rieles por cambio de columna (7)
Tenemos script/generate migration add_fieldname_to_tablename fieldname:datatype
sintaxis de script/generate migration add_fieldname_to_tablename fieldname:datatype
para agregar nuevas columnas a un modelo.
En la misma línea, ¿tenemos un script / generar para cambiar el tipo de datos de una columna? ¿O debería escribir SQL directamente en mi migración de vainilla?
Quiero cambiar una columna de datetime
a date
.
Con rieles 5
De guías de rieles :
Si desea que una migración haga algo que Active Record no sepa cómo revertir, puede usar
reversible
:
class ChangeTablenameFieldname < ActiveRecord::Migration[5.1]
def change
reversible do |dir|
change_table :tablename do |t|
dir.up { t.change :fieldname, :date }
dir.down { t.change :fieldname, :datetime }
end
end
end
end
Como encontré en las respuestas anteriores, se necesitan tres pasos para cambiar el tipo de columna:
Paso 1:
Genera un nuevo archivo de migración usando este código:
rails g migration sample_name_change_column_type
Paso 2:
Vaya a la carpeta /db/migrate
y edite el archivo de migración que creó. Hay dos soluciones diferentes.
def change change_column(:table_name, :column_name, :new_type) end
2.
def up
change_column :table_name, :column_name, :new_type
end
def down
change_column :table_name, :column_name, :old_type
end
Paso 3:
No te olvides de hacer este comando:
rake db:migrate
He probado esta solución para Rails 4 y funciona bien.
Creo que esto debería funcionar.
change_column :table_name, :column_name, :date
No sé si puede crear una migración desde la línea de comandos para hacer todo esto, pero puede crear una nueva migración y luego editar la migración para realizar estas tareas.
Si nombre de tabla es el nombre de su tabla, nombre de campo es el nombre de su campo y desea cambiar de datetime a date, puede escribir una migración para hacer esto.
Puedes crear una nueva migración con:
rails g migration change_data_type_for_fieldname
Luego edita la migración para usar change_table:
class ChangeDataTypeForFieldname < ActiveRecord::Migration
def self.up
change_table :tablename do |t|
t.change :fieldname, :date
end
end
def self.down
change_table :tablename do |t|
t.change :fieldname, :datetime
end
end
end
A continuación, ejecute la migración:
rake db:migrate
Solo genera migración:
rails g migration change_column_to_new_from_table_name
Actualizar la migración de esta manera:
class ClassName < ActiveRecord::Migration
change_table :table_name do |t|
t.change :column_name, :data_type
end
end
y finalmente
rake db:migrate
También puede usar un bloque si tiene varias columnas para cambiar dentro de una tabla.
Ejemplo:
change_table :table_name do |t|
t.change :column_name, :column_type, {options}
end
Consulte la documentación de la API en la clase Table para obtener más detalles.
Otra forma de cambiar el tipo de datos utilizando la migración
paso 1: debe eliminar el nombre del campo del tipo de datos con error utilizando la migración
ex:
rails g migration RemoveFieldNameFromTableName field_name:data_type
Aquí no olvides especificar el tipo de datos para tu campo.
Paso 2: Ahora puedes agregar un campo con el tipo de datos correcto
ex:
rails g migration AddFieldNameToTableName field_name:data_type
Eso es todo, ahora su tabla se agregará con el campo de tipo de datos correcto, Happy ruby coding !!