有什么区别:
t.boolean :test, :default => true
和
t.boolean :test, :null => true
和
t.boolean :test, :default => true, :null => true
修改
以下是否有意义?
t.boolean :test, :default => true, :null => false
答案 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
列的值。