Agregue un valor predeterminado a una columna mediante una migración

¿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í lo hace.

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 también el campo de la migración.

change_column_default :employees, :foreign, false

Para Rails 4+, use change_column_default

  def change change_column_default :table, :column, value end 

Aquí hay un enlace a la documentación change_column_default .

Usar def change significa que debe escribir migraciones que sean reversibles. Y change_column no es reversible. Puedes subir pero no puedes bajar, ya que change_column es irreversible.

En cambio, aunque puede haber un par de líneas adicionales, debe usar def up y def down

Entonces, si tiene una columna sin valor predeterminado, entonces debe hacer esto para agregar un valor predeterminado.

 def up change_column :users, :admin, :boolean, default: false end def down change_column :users, :admin, :boolean, default: nil end 

O si desea cambiar el valor predeterminado para una columna existente.

 def up change_column :users, :admin, :boolean, default: false end def down change_column :users, :admin, :boolean, default: true end 

** Rails 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

 $ rails generate migration add_columnname_to_tablename columnname:boolean 

El comando anterior agregará una nueva columna en su tabla.

2. Establezca el nuevo valor de columna en TRUE / FALSE editando el nuevo archivo de migración creado.

 class AddColumnnameToTablename < ActiveRecord::Migration def change add_column :table_name, :column_name, :boolean, default: false end end 

** 3. Para realizar los cambios en la tabla de la base de datos de la aplicación, ejecute el siguiente comando en la terminal **

 $ rake db:migrate 

Ejecutar:

 rails generate migration add_column_to_table column:boolean 

Generará esta migración:

 class AddColumnToTable < ActiveRecord::Migration def change add_column :table, :column, :boolean end end 

Establezca el valor predeterminado que agrega: predeterminado => 1

add_column: table,: column,: boolean,: default => 1

Correr:

rake db: migrar

Esto es lo que puedes hacer:

 class Profile < ActiveRecord::Base before_save :set_default_val def set_default_val self.send_updates = 'val' unless self.send_updates end end