10

根据rails文档

http://guides.rubyonrails.org/migrations.html

2.3 Supported Type Modifiers表示应该可以修改字段以允许或禁止列中的 NULL,并且可以在终端上执行此操作

这就是我希望出现在迁移文件中的内容

class CreateTestModels < ActiveRecord::Migration
  def change
    create_table :test_models do |t|
      t.string:non_nullable, :null => false

      t.timestamps
    end
  end
end

在终端上,我试过了

rails generate model TestModel non_nullable:string{null}
rails generate model TestModel 'non_nullable:string{null: false}'

我想不出任何其他方式来表达它

注意:我已经知道您可以进入迁移文件并手动添加它。这不是我要找的。

4

3 回答 3

1

文档提到_

一些常用的类型修饰符可以直接在命令行中传递。它们用花括号括起来并遵循字段类型

但他们没有详细说明哪些“常用”修饰符将起作用。

正如罗杰斯先生所指出的,只有三个支持的选项

  • 字符串/文本/二进制/整数 ( name:string{255})的长度
  • 精度,小数位数 ( dollar_fragment:decimal{3,2})
  • 多态的references/belongs_to ( agent:references{polymorphic})

正如 user2903934 所提到的,可以从命令行将其作为 hack 进行。

注意:这是一个黑客。我不建议这样做,但它确实回答了你的问题。

rails generate model TestModel 'non_nullable, null => false:string'

看起来它在第一个冒号上拆分,所以我们可以使用 hashrocket 语法在其中潜入选项。这产生:

class CreateTestModels < ActiveRecord::Migration
  def change
    create_table :test_models do |t|
      t.string :non_nullable, null => false

      t.timestamps
    end
  end
end

这显然没有得到官方的支持,它只是碰巧起作用。

于 2016-04-11T23:22:20.883 回答
0

我能得到的最接近你的解决方案是这样的:

rails generate model TestModel non_nullable,null:string

我无法弄清楚之后会发生什么,,但这应该让你开始

于 2014-08-28T14:29:28.883 回答
-2

您可以像这样在模型类中执行此操作-

class TestModel < ActiveRecord::Base
  validates_presence_of :non_nullable
end
于 2015-08-24T19:02:12.687 回答