怎么做:默认=> 0和:null =>迁移中的整数字段的false不一样?

时间:2010-10-25 08:21:51

标签: ruby-on-rails null migration default

如果我使用迁移来更新数据库,并添加如下整数字段:

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

数据库中现有记录和新记录的默认状态是什么?我希望答案是: - 两者都会将foo读回为0。

默认=> 0必要,如果我有:null =>假?

试着理解两者之间的区别......

1 个答案:

答案 0 :(得分:96)

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

:default => 0做了两件事:

  1. 告诉您的数据库在NULL或查询中未指定任何内容时使用“0”作为默认值。
  2. 告诉rails在创建新对象时使用'0'作为默认值。
  3. 第2点确保在保存新对象时,实际上有一个有效值。

    回答您的问题:如果您不希望数据库中包含NULL值,请设置:null => false,否则只需使用:default参数。请注意,'0'和NULL不是一回事。

    没有NULL值可能对索引目的很重要,或者如果您需要向第三方提供直接数据库访问权限。