开发者

Passing additional parameters to Rails Generate Model?

开发者 https://www.devze.com 2023-02-02 06:52 出处:网络
I\'m new to Ruby and Rails and I\'m running Rails 3 on Ruby 1.9.2. I want to create a model, so I looked at the documentation to get the table definition that I want, but I wonder how I would pass th

I'm new to Ruby and Rails and I'm running Rails 3 on Ruby 1.9.2.

I want to create a model, so I looked at the documentation to get the table definition that I want, but I wonder how I would pass this to rails generate model?

Basically I want this:

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

But I can only specify the column name and type, not :null or :limit.

I've tri开发者_StackOverflow中文版ed rails model generate Article (title:string, :null => false) (details:text, :limit=>30000, :null => false) but that just tells me that ( is an unexpected token.

If I just generate the model with title:string details:text then the article.rb file is empty, presumably because it's read from the DB anyway.

As everything in Rails is supposed to be a) simple and b) magic, I'm wondering if I'm just missing something and have to pass something like a hash to generate model? Or do I really have to manually edit the migration .rb file?


As it turns out, the limit can (now) be specified in the command line:

rails generate model user pseudo:string{30}

Source: usage doc from Rails GitHub project

Setting the default, however, still appears to require editing the migration manually.

For additional migration options, see the official Rails migrations guide.


Yes you do have to manually edit the migration file for that. The generator just offers a starting point, it does not do everything.

Doing this in the migration file is very easy anyway.

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


Try some tricks: belongs_to and index

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

This will create:

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


You can pass "null".to_sym => false in your rails generate model.
For example:

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

This will turn the "null" into a symbol, allowing it to run properly when running db:migrate

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号