移行を使用してデータベースを更新し、次のような整数フィールドを追加した場合:
t.integer :foo :default => 0, :null => false
データベース内の既存および新規レコードのデフォルト状態は何ですか?答えは次のとおりです。-両方ともfooを0として読み返します。
:null => falseがある場合、デフォルト=> 0が必要ですか?
2つの違いを理解しようとしています...
:null => false
は、NULL
値を受け入れないようにデータベースに指示します。
:default => 0
は2つのことを行います。
NULL
または何も指定されていない場合、デフォルト値として「0」を使用するようデータベースに指示します。ポイント2では、新しいオブジェクトを保存するときに、有効な値が実際に設定されていることを確認します。
質問に答えるには:データベースにNULL
値が必要ない場合は、:null => false
、それ以外の場合は単に:default
パラメータ。 「0」とNULL
は同じものではありません。
NULL
値を持たないことは、インデックス作成の目的で、またはサードパーティに直接データベースアクセスを提供する必要がある場合に重要です。