2010-06-26 112 views
7

比方說,我用下面的命令來創建一個「用戶」的模式:在軌/遷移更新機型

script/generate model User username:string 

這與遷移RB文件來創建用戶表一起創建user.rb文件。現在,我想爲我的用戶模型添加一個電子郵件列。什麼是最好的方式來做到這一點?我是否手動執行並手動編寫遷移文件,或者有沒有捷徑可以做到這一點?如果我手動編寫遷移,是否必須按照與以前的遷移腳本(前面帶有時間戳)相同的方式命名它,以確保它在上次遷移後運行?

回答

6

不要擔心時間戳。它會自動生成。 你可以做一個

script\generate migration add_email_to_user email:string 

這會自動創建一個遷移文件,該文件是這樣的:

class AddEmailToUser < ActiveRecord::Migration 
    def self.up 
    add_column :email, :string 
    end 

    def self.down 
    remove_column :email 
    end 
end 

該文件將在格式YYYYMMDDHHMMSS的時間戳(對於Rails開發2.1及以上)追加在文件名前面。

2

Guide有關於生成遷移的信息。如果您使用的鐵軌發電機,它會創建正確命名的文件:

ruby script/generate migration AddEmailToUser email:string 
1

那麼你可以做兩件事情:

1)如果你還沒有部署任何地方這樣呢,或者你不介意轉儲數據庫並再次運行您的遷移,然後修改文件。從你的數據庫中刪除表,然後運行db:migrate。容易在開發中做到這一點。

2)如果此應用程序正在生產中,或者您不想刪除所有表格。然後創建一個新的遷移文件。然後在這個新的遷移中添加/修改/刪除該列。然後運行db:migrate,新的更改將在您的表中生效。這是最佳做法。

至於命名您的遷移,使用時間戳,因爲軌道將創建一個表,跟蹤最新的遷移運行。爲此,最好使用時間戳。但是,如果您選擇,您可以使用自己的約定而不是時間戳。也許將它們命名爲001_migration.rb,002_migration.rb等。

希望有所幫助。