Rails - 使用`rails generate model`来指定不可为空的字段类型

时间:2014-01-20 01:56:56

标签: ruby-on-rails ruby rails-generate rails-generators

根据rails文档

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

2.3支持的类型修饰符表示应该可以修改字段以允许或禁止列中的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}'

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

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

3 个答案:

答案 0 :(得分:1)

docs提到

  

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

但他们没有详细说明哪些&#34;常用&#34;修饰符将起作用。

正如罗杰斯先生所指出的那样 只有three supported options

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

如user2903934所述 也许可以从命令行将其作为黑客进行工作。

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

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

显然没有得到官方支持,它恰好可以正常工作。

答案 1 :(得分:0)

我能找到最接近您的解决方案的是:

rails generate model TestModel non_nullable,null:string

我无法解决,之后的问题,但这应该会给你一个开始

答案 2 :(得分:-2)

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

class TestModel < ActiveRecord::Base
  validates_presence_of :non_nullable
end