¿Cómo agrego un valor predeterminado a una columna que ya existe a través de una migración?
Toda la documentación que puedo encontrar le muestra cómo hacerlo si la columna aún no existe, pero en este caso sí.
¿Cómo agrego un valor predeterminado a una columna que ya existe a través de una migración?
Toda la documentación que puedo encontrar le muestra cómo hacerlo si la columna aún no existe, pero en este caso sí.
Así es como debes hacerlo:
change_column :users, :admin, :boolean, :default => false
Pero algunas bases de datos, como PostgreSQL, no actualizarán el campo para las filas creadas previamente, así que asegúrese de actualizar el campo también en la migración.
up
bloque en lugar de unchange
bloque. Puedes dejar eldown
bloque vacío. No revertirá la tabla a la condición original, pero la migración puede revertirse.fuente
from:
yto:
si usted quiere que sea reversible :)from
yto
se agregó en Rails 5+ en esta confirmación: github.com/rails/rails/pull/20018/filesPara Rails 4+ , use
change_column_default
fuente
def change
`add_column: foos,: name, default:" algo para valores existentes "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- pero tampoco funciona.Usar
def change
significa que debe escribir migraciones que sean reversibles. Ychange_column
no es reversible. Puedes subir pero no puedes bajar, ya quechange_column
es irreversible.En cambio, aunque puede ser un par de líneas adicionales, debe usar
def up
ydef down
Entonces, si tiene una columna sin valor predeterminado, debe hacer esto para agregar un valor predeterminado.
O si desea cambiar el valor predeterminado para una columna existente.
fuente
** Rieles 4.X + **
A partir de Rails 4, no puede generar una migración para agregar una columna a una tabla con un valor predeterminado. Los siguientes pasos agregan una nueva columna a una tabla existente con el valor predeterminado verdadero o falso.
1. Ejecute la migración desde la línea de comando para agregar la nueva columna
El comando anterior agregará una nueva columna en su tabla.
2. Establezca el nuevo valor de columna en VERDADERO / FALSO editando el nuevo archivo de migración creado.
** 3. Para realizar los cambios en la tabla de la base de datos de la aplicación, ejecute el siguiente comando en la terminal **
fuente
Ejecutar:
Generará esta migración:
Establezca el valor predeterminado agregando: default => 1
Correr:
fuente
Key is not present in table error
.Esto es lo que puedes hacer:
EDITAR: ... pero aparentemente este es un error de novato!
fuente
before_save