迁移中default和null之间的区别是什么

时间:2011-07-09 16:57:48

标签: ruby-on-rails ruby ruby-on-rails-3

有什么区别:

t.boolean :test, :default => true

t.boolean :test, :null => true

t.boolean :test, :default => true, :null => true

修改

以下是否有意义?

t.boolean :test, :default => true, :null => false

3 个答案:

答案 0 :(得分:24)

“null”表示“您是否可以在此列中输入空值”?

“默认”表示“如果此列中有空值...则使用此默认值”

所以,对于你的例子:

t.boolean :test, :default => true

“如果您不打扰为它设置值,则此布尔列将插入true”

t.boolean :test, :null => true

“这个布尔列会让你将它设置为true,false或null - 它将保持你设置它的方式”

t.boolean :test, :default => true, :null => true

“此布尔列将允许您将其设置为true,false或null ...但如果将其设置为null,则会自动将其设置为true”

答案 1 :(得分:3)

:default - 列的默认值。使用nil表示NULL。

:null - 允许或禁止列中的NULL值。此选项可能已命名为:null_allowed。

在第一个选项中,如果您没有指定任何内容,则rails将为true 在第二个选项中,它将允许值为null。 在第三个选项中,两者都适用,值可以是true,false和nil

答案 2 :(得分:3)

回答OP的问题:

以下是否有意义?

t.boolean :test, :default => true, :null => false

当然,让我们来看看可能的SQL事件。 (请记住,您设置的default参数对INSERT INTO语句生效,如下所示。)

INSERT INTO table_name id, test VALUES 1, NULL; # This should raise an error
INSERT INTO table_name id VALUES 1;             # This will default test column's value to true

因此,它可能有意义 - 如果您想明确禁止NULL值(如果尝试直接将值设置为NULL),并且您还想强制test语句中,true列中缺少或缺少INSERT INTO列的值。