Rails で NOT NULL なカラムに DEFAULT値 が入る挙動には注意が必要(自分で nil を代入した場合は DEFAULT値 は入らない)

結論

標題で全てな気がするのですが、以下の例のとおりです。自前で nil を代入した場合には、そのカラムは DEFAULT の値が自動で入ってくれません*1

例として、User というモデルを使います。ここで、height というカラムに NOT NULL 制約がついていて、DEFAULT-1 であるとします。

レコード新規作成時

> User.new
=> #<User:0x00007f9709765500
 id: nil,
 height: -1,
(以下省略)

自分で値を代入する

> attrs_for_new_user_record = { height: nil }
> User.new(attrs_for_new_user_record )
=> #<User:0x00007f9709765500
 id: nil,
 height: nil,
(以下省略)

*1:上書きされる。当然といえば当然

Powered by はてなブログ