Rails 4 (другие ответы по Rails 4 имеют проблемы):
def change
change_column_null(:users, :admin, false, <put a default value here> )
# change_column(:users, :admin, :string, :default => "")
end
Изменение столбца со значениями NULL в нем, чтобы запретить NULL, вызовет проблемы. Это именно тот код, который будет нормально работать в вашей настройке разработки, а затем падать, когда вы пытаетесь развернуть его в своей рабочей среде LIVE . Сначала вы должны изменить значения NULL на что-то допустимое, а затем запретить значения NULL. 4-е значение в change_column_null
делает именно это. Смотрите документацию для более подробной информации.
Кроме того, я обычно предпочитаю устанавливать значение по умолчанию для поля, поэтому мне не нужно будет указывать значение поля каждый раз, когда я создаю новый объект. Я включил закомментированный код, чтобы сделать это также.
MyModel.update_all({:date_column => Time.now}, {:date_column => nil})
. Запрос в вашей исходной форме только что заставил все мои модели иметь нулевое значение в поле.