我是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文件吗?
答案 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
时正常运行