了解rails migration语句(:null => false)

时间:2013-03-12 17:57:05

标签: ruby-on-rails-3 migration

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

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

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

:null => false

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

3 个答案:

答案 0 :(得分:21)

Rails迁移中的

: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值”。