对于迁移中的整数字段,如何:default => 0和:null => false不同?
如果我使用迁移来更新数据库,并添加一个像这样的整数字段:
t.integer :foo :default => 0, :null => false
数据库中现有logging和新logging的默认状态是什么? 我希望答案是: – 都将读回foo为0。
是默认=> 0必要的,如果我有:null => false?
试图了解两者之间的区别
:null => false
告诉你的数据库不接受NULL
值。
:default => 0
做两件事:
- 当在查询中指定
NULL
或没有任何内容时,告诉数据库使用'0'作为默认值。 - 在创build新对象时,请指定rails使用“0”作为默认值。
第2点确保当你保存你的新对象,你实际上有一个有效的值。
要回答你的问题:如果你不想在你的数据库中使用NULL
值,请设置:null => false
,否则使用:default
参数。 请注意,'0'和NULL
不是一回事。
不具有NULL
值对于build立索引或者是否需要向第三方提供直接的数据库访问非常重要。