Чем отличаются: default => 0 и: null => false для целочисленных полей в миграциях? - PullRequest
47 голосов
/ 25 октября 2010

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

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

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

Требуется ли default => 0, если у меня есть: null => false?

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

1 Ответ

96 голосов
/ 25 октября 2010

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

:default => 0 делает две вещи:

  1. Скажите вашей базе данных использовать «0» в качестве значения по умолчанию, когда NULL или ничего не указано в запросе.
  2. Скажите rails использовать «0» в качестве значения по умолчанию при создании нового объекта.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...