如果我使用迁移来更新数据库,并添加如下整数字段:
t.integer :foo :default => 0, :null => false
数据库中现有记录和新记录的默认状态是什么?我希望答案是: - 两者都会将foo读回为0。
默认=> 0必要,如果我有:null =>假?
试着理解两者之间的区别......
答案 0 :(得分:96)
:null => false
告诉您的数据库不要接受NULL
值。
:default => 0
做了两件事:
NULL
或查询中未指定任何内容时使用“0”作为默认值。第2点确保在保存新对象时,实际上有一个有效值。
回答您的问题:如果您不希望数据库中包含NULL
值,请设置:null => false
,否则只需使用:default
参数。请注意,'0'和NULL
不是一回事。
没有NULL
值可能对索引目的很重要,或者如果您需要向第三方提供直接数据库访问权限。