我试图理解以下语句,它来自 rails 迁移文件:
x.datetime "new", :null => false
x.datetime "update", :null => false
我理解这两个语句的第一部分(逗号之前的所有内容),但我不确定 null 部分
:null => false
这基本上是在说“如果它不存在,那么它就是假的?” 逻辑似乎有点奇怪,对此的任何澄清都会非常有帮助。
我试图理解以下语句,它来自 rails 迁移文件:
x.datetime "new", :null => false
x.datetime "update", :null => false
我理解这两个语句的第一部分(逗号之前的所有内容),但我不确定 null 部分
:null => false
这基本上是在说“如果它不存在,那么它就是假的?” 逻辑似乎有点奇怪,对此的任何澄清都会非常有帮助。
:null => false
在 Rails 迁移中告诉您的数据库不接受 NULL 值。它可用于:default => 0
告诉您的数据库使用“0”作为默认值(a)当查询中指定 NULL 或未指定任何内容时或(b)创建或更新对象时。(记住,'0' 和 NULL 不是一回事。)
编辑:自从最初提到 CoffeeScript以来,我一直认为这个问题是关于语法和翻译的。出于目的,请参阅Peter Bloom 的回答。
我不确定这到底是什么
:null => false
意思。
运算符是 Ruby 中的=>
键/值分隔符,定义 aHash
并将:null
键设置为false
。它类似于CoffeeScript/JavaScript:
中的文字 -- 。Object
{ null: false }
在参数列表中使用时,它是在 Ruby 中允许/模仿命名参数的一种选择。
另一个主要区别是 CoffeeScript/JavaScript 使用String
s 作为键,而 Ruby 通常使用符号- "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 });
首先,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
方法的选项参数。
根据文档,这些选项之一是:null
允许或禁止列中的 NULL 值。
因此,总而言之,:null => false
这意味着“不允许在新列或更新列中使用 NULL 值”。