rails migraciones llaves foraneas columna agregar ruby-on-rails ruby migration

ruby-on-rails - migraciones - llaves foraneas ruby on rails



Agregar un valor predeterminado a una columna a través de una migración (7)

¿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 no existe, pero en este caso sí.


** 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 un valor predeterminado verdadero o falso.

1. Ejecute la migración desde la línea de comandos 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 VERDADERO / FALSO 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


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 anteriormente, así que asegúrese de actualizar el campo de forma manual en la migración también.


Ejecutar:

rails generate migration add_column_to_table column:boolean

Se generará esta migración:

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

Establecer el valor predeterminado añadiendo: predeterminado => 1

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

Correr:

rastrillo db: migrar


El uso de 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 su lugar, aunque puede ser un par de líneas adicionales, debe usar def up y def down

Entonces, si tiene una columna sin valor predeterminado, 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


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



change_column_default :employees, :foreign, false