2011-10-09 83 views
2

迁移我在Ruby on Rails的初学者,在按照以下文章: - http://guides.rubyonrails.org/migrations.html生成的模型

如果我需要生成一个迁移和模型,我可以使用,例如: -

$ rails generate model Product name:string description:text 

而且会造成: -

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 
     t.string :name 
     t.text :description 

     t.timestamps 
    end 
    end 
end 

但是,如果我有一个更大的模型(具有许多特性)。我不想把所有的属性放在“rails generate”命令中。我可以先手动编码模型,然后从该模型文件生成迁移?

对不起,问这么愚蠢的问题。我只是想明白。

+0

目前还不清楚,你想做什么? http://guides.rubyonrails.org/migrations.html,http://guides.rubyonrails.org/association_basics.html – shibly

回答

2

生成命令不是必须要做的事情。这只是一个脚本,可以帮助你自动完成一些工作。执行完生成命令后,您在控制台中看到的命令完成了什么。它看起来像这样:

rails generate scaffold User name:string email:string 
     invoke active_record 
     create 
     db/migrate/20100615004000_create_users.rb 
    create 
     app/models/user.rb 
     invoke 
     test_unit 
     create 
     test/unit/user_test.rb 
     create 
     test/fixtures/users.yml 
     route resources :users 
     invoke scaffold_controller 
     create 
     app/controllers/users_controller.rb 
     invoke 
     erb 
     create 
     app/views/users 
     create 
     app/views/users/index.html.erb 
     create 
     app/views/users/edit.html.erb 
     create 
     app/views/users/show.html.erb 
     create 
     app/views/users/new.html.erb 
     create 
     app/views/users/_form.html.erb 
     invoke 
     test_unit 
     create 
     test/functional/users_controller_test.rb 
     invoke 
     helper 
     create 
     app/helpers/users_helper.rb 
     invoke 
     test_unit 
     create 
     test/unit/helpers/users_helper_test.rb 
     invoke stylesheets 
     converted by Web2PDFConvert.com 
     create 
     public/stylesheets/scaffold.css 

您实际上可以创建/修改您的手的所有文件。但使用generate的好处是它会自动调用所有必要的插件等来生成所有必需的文件。 这就是为什么建议使用生成命令,即使是非常复杂的模型,控制器等。 因此,在你的情况下,我建议分几步建造模型。这可能是这样的:

rails generate model Product name:string description:text 
rails generate migration AddPriceToProducts price:integer 
rails generate migration AddDiscountToProducts discount:integer 
and so on 

的每一步,你可以在回退功能,如果你做了一些错误,它可以帮助你不会伤害 你的数据库。

1

您可以手动编写迁移。模型的属性直接从数据库中读取......所以如果您将t.string :name添加到迁移文件中,然后运行rake db:migrate,那么该列将被添加到表中,因此将其作为模型的属性提供。