【问题标题】:Passing additional parameters to Rails Generate Model?将其他参数传递给 Rails 生成模型?
【发布时间】:2016-06-07 08:01:41
【问题描述】:

我是 Ruby 和 Rails 的新手,我在 Ruby 1.9.2 上运行 Rails 3。

我想创建一个模型,所以我查看了documentation 以获得我想要的表定义,但我想知道如何将它传递给 rails generate model?

基本上我想要这个:

title :string, :null => false
details :text, :limit => 30000, :null => false

但我只能指定列名和类型,不能指定 :null 或 :limit。

我试过 rails model generate Article (title:string, :null => false) (details:text, :limit=>30000, :null => false) 但这只是告诉我 ( 是一个意外的标记。

如果我只是生成带有 title:string details:text 的模型,那么 article.rb 文件是空的,大概是因为它是从 DB 中读取的。

由于 Rails 中的一切都应该是 a) 简单和 b) 神奇,我想知道我是否只是遗漏了一些东西并且必须传递像哈希这样的东西来生成模型?还是我真的必须手动编辑迁移 .rb 文件?

【问题讨论】:

  • 你必须手动编辑它。

标签: ruby-on-rails activerecord ruby-on-rails-3


【解决方案1】:

事实证明,限制可以(现在)在命令行中指定:

rails generate model user pseudo:string{30}

来源: usage doc from Rails GitHub project

然而,设置默认值似乎仍然需要手动编辑迁移。

有关其他迁移选项,请参阅the official Rails migrations guide

【讨论】:

  • 哇!这个答案太对了。我如何从命令行显示文档? rails 帮助模型?
【解决方案2】:

是的,您必须为此手动编辑迁移文件。生成器只是提供了一个起点,它并没有做任何事情。

无论如何,在迁移文件中执行此操作非常容易。

create_table :articles do |t|
  t.string :title, :null => false
  t.text   :details, :limit => 3000, :null => false
end

【讨论】:

  • 这花了我很长时间才找到。我一直在寻找如何在我的rails g scaffold... 中进行限制,谢谢!
【解决方案3】:

尝试一些技巧:belongs_to 和 index

rails g model User username:string:index group:belongs_to

这将创建:

class User < ActiveRecord::Base
  belongs_to :group
  attr_accessible :username
end

【讨论】:

    【解决方案4】:

    您可以在 rails 生成模型中传递 "null".to_sym =&gt; false
    例如:

    rails g model client 'ClientName, "null".to_sym => false:string{100}'
    

    这会将"null"变成一个符号,让它在运行db:migrate时可以正常运行@

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2014-06-26
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多