Нельзя добавить ограничение NOT NULL
к столбцу, который содержит нулевые значения.
Так или иначе, вам нужно избавиться от этих значений перед выполнением такой миграции.
Например, как вы предложили выше, возможно, все они должны быть установлены на 0
:
MyModel.where(authentication_ttl: nil).update_all(authentication_ttl: 0)
... Или, может быть, есть какое-то другое значение, которое (некоторые из) этих столбцов можно установить на?
Или, может быть, эти строки на самом деле не имеют смысла и должны быть удалены?
MyModel.where(authentication_ttl: nil).delete_all
(Или, возможно, вам следует destroy_all
, чтобы вызвать обратные вызовы рельсов?)
Короче говоря, ответ действительно зависит от ваших конкретных обстоятельств. Но так или иначе, вам нужно сначала избавиться от null
.
Обратите внимание, что если у вас есть производственная среда, а также локальная среда, то это необходимо учитывать перед развертыванием. Опять же, так или иначе (например, возможно, с помощью грабли), вам необходимо «исправить» производственные данные перед развертыванием такой миграции.