Tenemos script/generate migration add_fieldname_to_tablename fieldname:datatype
sintaxis 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 vainilla?
Quiero cambiar una columna de datetime
a date
.
ruby-on-rails
migration
papdel
fuente
fuente
change
acción habitual con acciones separadasup
ydown
acciones, ya quechange_column
es una migración irreversible y generará un error si necesita retroceder.También puede usar un bloque si tiene varias columnas para cambiar dentro de una tabla.
Ejemplo:
Consulte la documentación de la API en la clase Tabla para obtener más detalles.
fuente
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 tablename es el nombre de su tabla, fieldname es el nombre de su campo y desea cambiar de una fecha a otra, puede escribir una migración para hacerlo.
Puede crear una nueva migración con:
Luego edite la migración para usar change_table:
Luego ejecute la migración:
fuente
Como descubrí en las respuestas anteriores, se necesitan tres pasos para cambiar el tipo de columna:
Paso 1:
Genere un nuevo archivo de migración con este código:
Paso 2:
Vaya a la
/db/migrate
carpeta y edite el archivo de migración que realizó. Hay dos soluciones diferentes.2)
Paso 3:
No olvides hacer este comando:
He probado esta solución para Rails 4 y funciona bien.
fuente
Con rieles 5
De guías de rieles :
fuente
Solo genera migración:
Actualice la migración de esta manera:
y finalmente
fuente
Otra forma de cambiar el tipo de datos mediante la migración.
Paso 1: debe eliminar el nombre del campo del tipo de datos defectuoso mediante la migración
ex:
Aquí no olvide especificar el tipo de datos para su campo
Paso 2: ahora puede agregar un campo con el tipo de datos correcto
ex:
Eso es todo, ahora su tabla se agregará con el campo de tipo de datos correcto, ¡Feliz codificación de rubíes!
fuente
Todo esto supone que el tipo de datos de la columna tiene una conversión implícita para cualquier dato existente. Me he encontrado con varias situaciones en las que los datos existentes, digamos que a,
String
se pueden convertir implícitamente en el nuevo tipo de datos, digamosDate
.En esta situación, es útil saber que puede crear migraciones con conversiones de datos. Personalmente, me gusta ponerlos en mi archivo modelo y luego eliminarlos después de que todos los esquemas de la base de datos se hayan migrado y sean estables.
fuente
Para completar las respuestas en caso de editar el valor predeterminado :
En la consola de tus rieles:
En la migración:
Se vera como :
fuente