将其他参数传递给Rails生成模型?

时间:2010-12-30 12:42:58

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

我是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文件吗?

4 个答案:

答案 0 :(得分:19)

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

rails generate model user pseudo:string{30}

来源: usage doc from Rails GitHub project

但是,设置默认值仍然需要手动编辑迁移。

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

答案 1 :(得分:8)

是的,您必须手动编辑该迁移文件。发电机只是提供一个起点,它并不能完成所有工作。

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

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

答案 2 :(得分:7)

尝试一些技巧:belongs_to和index

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

这将创建:

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

答案 3 :(得分:1)

您可以在 rails generate model 中传递"null".to_sym => false 例如:

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

这会将“null”转换为符号,以便在运行db:migrate时正常运行