2011-10-09 159 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,那麼該列將被添加到表中,因此將其作爲模型的屬性提供。