我试图理解以下语句,它来自rails迁移文件:
x.datetime "new", :null => false
x.datetime "update", :null => false
我理解两个语句的第一部分(逗号之前的所有内容)但我不确定空部分
:null => false
这基本上是说"如果它不存在,那么它是假的吗?"这个逻辑似乎有点奇怪,对此的任何澄清都会非常有用。
答案 0 :(得分:21)
:null => false
告诉您的数据库不接受NULL值。它可以与:default => 0
一起使用,告诉您的数据库在查询中指定NULL或无或(b)创建或更新对象时使用'0'作为默认值(a)。 (记住,'0'和NULL不是一回事。)
答案 1 :(得分:2)
编辑:因为它是originally mentioned CoffeeScript,我接受了关于语法和翻译的问题。有关目的,请参阅Peter Bloom's answer。
我不确定
:null => false
究竟是什么意思。
=>
运算符是Ruby中的键/值分隔符,定义Hash
,:null
键设置为false
。它与CoffeeScript / JavaScript中的:
字面值Object
类似{ null: false }
。
当在参数列表中使用时,它是允许/模仿Ruby中的命名参数的一个选项。
另一个主要区别是CoffeeScript / JavaScript使用String
作为键,而Ruby通常使用Symbols - "null"
(cs / js)与:null
( RB)。
因此,CoffeeScript中的语法等价物将是:
x.datetime "new", null: false
x.datetime "update", null: false
在JavaScript中,那是:
x.datetime("new", { null: false });
x.datetime("update", { null: false });
答案 2 :(得分:2)
首先,我不是使用x
,而是使用迁移中使用的标准t
变量。
现在,在迁移文件中,t
中的create_table
对象实际上是ActiveRecord::ConnectionAdapters::TableDefinition
类型。
和
t.datetime "new", :null => false
t.datetime "update", :null => false
实际上翻译为
t.column("new", :datetime, { :null => false })
t.column("update", :datetime, { :null => false })
其中最后一个参数是column
方法的options参数。
根据documentation其中一个选项:null
允许或禁止列中的NULL值。
因此,总结:null => false
意味着“不允许在新列或更新列中使用NULL值”。