Rails 4 (outras respostas do Rails 4 têm problemas):
def change
change_column_null(:users, :admin, false, <put a default value here> )
# change_column(:users, :admin, :string, :default => "")
end
Alterar uma coluna com valores NULL para não permitir NULL causará problemas. Esse é exatamente o tipo de código que funcionará bem na sua configuração de desenvolvimento e falhará quando você tentar implantá-lo na sua produção do LIVE . Você deve primeiro alterar valores NULL para algo válido e, em seguida, desabilitar NULLs. O quarto valor em change_column_null
faz exatamente isso. Veja a documentação para mais detalhes.
Além disso, geralmente prefiro definir um valor padrão para o campo, portanto não precisarei especificar o valor do campo toda vez que criar um novo objeto. Incluí o código comentado para fazer isso também.
MyModel.update_all({:date_column => Time.now}, {:date_column => nil})
. A consulta em sua forma original apenas fez com que todos os meus modelos tenham valor nulo no campo.