对于迁移中的整数字段,如何:default => 0和:null => false不同?

如果我使用迁移来更新数据库,并添加一个像这样的整数字段:

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

数据库中现有logging和新logging的默认状态是什么? 我希望答案是: – 都将读回foo为0。

是默认=> 0必要的,如果我有:null => false?

试图了解两者之间的区别

:null => false告诉你的数据库不接受NULL值。

:default => 0做两件事:

  1. 当在查询中指定NULL或没有任何内容时,告诉数据库使用'0'作为默认值。
  2. 在创build新对象时,请指定rails使用“0”作为默认值。

第2点确保当你保存你的新对象,你实际上有一个有效的值。

要回答你的问题:如果你不想在你的数据库中使用NULL值,请设置:null => false ,否则使用:default参数。 请注意,'0'和NULL不是一回事。

不具有NULL值对于build立索引或者是否需要向第三方提供直接的数据库访问非常重要。