web-dev-qa-db-fra.com

Comment: default => 0 et: null => false diffèrent pour les champs entiers dans les migrations?

Si j'utilise une migration pour mettre à jour une base de données et que j'ajoute un champ entier comme celui-ci:

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

Quel est l'état par défaut des enregistrements existants et nouveaux dans la base de données? J'espère que la réponse est: - Les deux liront foo comme 0.

La valeur par défaut => 0 est-elle nécessaire si j'ai: null => false?

J'essaie juste de comprendre la différence entre les deux ...

47
cmaughan

:null => false indique à votre base de données de ne pas accepter les valeurs NULL.

:default => 0 fait deux choses:

  1. Dites à votre base de données d'utiliser '0' comme valeur par défaut lorsque NULL ou rien n'est spécifié dans une requête.
  2. Dites Rails à utiliser '0' comme valeur par défaut lors de la création d'un nouvel objet.

Le point 2 garantit que lorsque vous enregistrez votre nouvel objet, vous avez réellement une valeur valide en place.

Pour répondre à votre question: Si vous ne voulez pas de valeurs NULL dans votre base de données, définissez :null => false, sinon utilisez simplement le :default paramètre. Attention, "0" et NULL ne sont pas les mêmes choses.

Ne pas avoir de valeurs NULL peut être important à des fins d'indexation ou si vous devez fournir un accès direct à la base de données à un tiers.

99
Ariejan