Respuestas:
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.
change_column_default :employees, :foreign, false
from:
y to:
si usted quiere que sea reversible :)
Para Rails 4+ , usechange_column_default
def change
change_column_default :table, :column, value
end
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. Y change_column
no es reversible. Puedes subir pero no puedes bajar, ya que change_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.
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
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.
$ rails generate migration add_columnname_to_tablename columnname:boolean
El comando anterior agregará una nueva columna en su tabla.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ 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 agregando: default => 1
add_column: table,: column,: boolean,: default => 1
Correr:
rastrillo db: migrar
Key is not present in table error
.
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
EDITAR: ... pero aparentemente este es un error de novato!
before_save
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.