Rails 4 (otras respuestas de Rails 4 tienen problemas):
def change
change_column_null(:users, :admin, false, <put a default value here> )
# change_column(:users, :admin, :string, :default => "")
end
Cambiar una columna con valores NULL para no permitir NULL causará problemas. Este es exactamente el tipo de código que funcionará bien en su configuración de desarrollo y luego se bloqueará cuando intente implementarlo en su producción EN VIVO . Primero debe cambiar los valores NULL a algo válido y luego no permitir NULL. El cuarto valor en change_column_null
hace exactamente eso. Ver documentación para más detalles.
Además, generalmente prefiero establecer un valor predeterminado para el campo, por lo que no necesitaré especificar el valor del campo cada vez que creo un nuevo objeto. Incluí el código comentado para hacer eso también.
MyModel.update_all({:date_column => Time.now}, {:date_column => nil})
. La consulta en su forma original acaba de hacer que todos mis modelos tengan un valor nulo en el campo.