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

Mic*_*tum 11 activerecord ruby-on-rails ruby-on-rails-3

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

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

基本上我想要这个:

title :string, :null => false
details :text, :limit => 30000, :null => false
Run Code Online (Sandbox Code Playgroud)

但我只能指定列名和类型,而不是: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文件?

Dre*_*awn 19

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

rails generate model user pseudo:string{30}
Run Code Online (Sandbox Code Playgroud)

来源: Rails GitHub项目的使用文档

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

有关其他迁移选项,请参阅官方Rails迁移指南.


edg*_*ner 8

是的,您必须手动编辑该迁移文件.发电机只是提供一个起点,它不会做任何事情.

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

create_table :articles do |t|
  t.string :title, :null => false
  t.text   :details, :limit => 3000, :null => false
end
Run Code Online (Sandbox Code Playgroud)


kub*_*oon 7

尝试一些技巧:belongs_to和index

rails g model User username:string:index group:belongs_to
Run Code Online (Sandbox Code Playgroud)

这将创建:

class User < ActiveRecord::Base
  belongs_to :group
  attr_accessible :username
end
Run Code Online (Sandbox Code Playgroud)