怎么做:默认=> 0和:null => false对于迁移中的整数字段有何不同?

cma*_*han 47 migration null default ruby-on-rails

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

t.integer :foo :default => 0, :null => false
Run Code Online (Sandbox Code Playgroud)

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

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

只是想了解两者之间的区别......

Ari*_*jan 100

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

:default => 0 做两件事:

  1. 告诉您的数据库NULL在查询中指定或不指定任何内容时使用"0"作为默认值.
  2. 在创建新对象时,告诉rails使用'0'作为默认值.

第2点确保在保存新对象时,实际上有一个有效值.

要回答您的问题:如果您不想NULL在数据库中设置值,请设置:null => false,否则只需使用该:default参数.请注意,'0' NULL并不是一样的东西.

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

  • @ahnbizcad 不明白这一点,第三方的直接连接与不想要空值有何关系? (2认同)