Подтвердить что ты не робот

Как: default => 0 и: null => false отличаются для целых полей при миграции?

Если я использую миграцию для обновления базы данных, и я добавляю целое поле следующим образом:

t.integer :foo :default => 0, :null => false

Каково состояние по умолчанию существующих и новых записей в базе данных? Я надеюсь, что ответ будет следующим: - Оба будут читать foo как 0.

Значение по умолчанию = > 0 необходимо, если у меня есть: null = > false?

Просто пытаюсь понять разницу между двумя...

4b9b3361

Ответ 1

:null => false указывает вашей базе данных не принимать значения NULL.

:default => 0 выполняет две вещи:

  • Сообщите вашей базе данных, что "0" используется как значение по умолчанию, когда NULL или ничего не указано в запросе.
  • Сканировать рельсы для использования "0" в качестве значения по умолчанию при создании нового объекта.

Точка 2 гарантирует, что при сохранении нового объекта у вас действительно есть действующее значение.

Чтобы ответить на ваш вопрос: если вы не хотите использовать значения NULL в своей базе данных, установите :null => false, иначе просто используйте параметр :default. Имейте в виду, что "0" и NULL - это не одно и то же.

Нельзя иметь значения NULL для целей индексирования или если вам необходимо обеспечить прямой доступ к базе данных третьим лицам.