5

我试图理解以下语句,它来自 rails 迁移文件:

x.datetime "new",     :null => false
x.datetime "update",  :null => false

我理解这两个语句的第一部分(逗号之前的所有内容),但我不确定 null 部分

:null => false

这基本上是在说“如果它不存在,那么它就是假的?” 逻辑似乎有点奇怪,对此的任何澄清都会非常有帮助。

4

3 回答 3

23

:null => false在 Rails 迁移中告诉您的数据库不接受 NULL 值。它可用于:default => 0告诉您的数据库使用“0”作为默认值(a)当查询中指定 NULL 或未指定任何内容时或(b)创建或更新对象时。(记住,'0' 和 NULL 不是一回事。)

于 2013-05-16T22:09:24.780 回答
2

编辑:自从最初提到 CoffeeScript以来,我一直认为这个问题是关于语法和翻译的。出于目的,请参阅Peter Bloom 的回答


我不确定这到底是什么:null => false意思。

运算符是 Ruby 中的=>键/值分隔符,定义 aHash并将:null键设置为false。它类似于CoffeeScript/JavaScript:中的文字 -- 。Object{ null: false }

在参数列表中使用时,它是在 Ruby 中允许/模仿命名参数的一种选择。

另一个主要区别是 CoffeeScript/JavaScript 使用Strings 作为键,而 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 });
于 2013-03-12T18:53:57.713 回答
2

首先,xt不会使用迁移中使用的标准变量。

现在,在迁移文件中,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 值”。

于 2014-03-02T10:44:36.040 回答