ruby-on-rails - remove - rollback migration rails
¿Migración de Rails para convertir cadena a entero? (3)
Las otras respuestas son correctas, pero puede ir un paso más allá con la palabra clave: :using
:
change_column :people, :company_id, :integer, using: ''company_id::integer''
¿Es posible cambiar un campo que es una cadena a un entero sin borrar los datos ya ingresados?
La estructura db actual para la tabla en cuestión es:
create_table :people do |t|
t.string :company_id
¿Es esto posible usar migraciones?
Estoy pensando que tal vez en el campo de migración elimine el campo anterior, cree uno nuevo que sea un entero, pero me preocupa que esto borre todos los datos ya ingresados.
Gracias,
Danny
No suelte la columna, borrará los datos.
Sin embargo puedes intentar
change_column :people, :company_id, :integer
y si todos los valores en company_id
se pueden convertir a un integer
, debería estar bien.
Si ese no es el caso (es decir, no todas las cadenas se pueden convertir de manera predeterminada), entonces puede hacerlo en dos pasos: 1) crear una nueva columna, luego cargar el company_id
de la compañía allí después de una conversión. 2) suelte company_id y luego cambie el nombre de la nueva columna.
Debería tener cuidado con ambos métodos (más aún para el segundo) y probablemente debería hacerlo primero en una copia de la base de datos, si puede.
No sueltes la columna, usa esto
change_column :table_name, :column_name, ''integer USING CAST(column_name AS integer)''
La "sugerencia" que recibió de PostgreSQL básicamente le dice que necesita confirmar que desea que esto suceda, y cómo deben convertirse los datos. Para confirmar los cambios, use el bloque de arriba en su migración