比方說,我用下面的命令來創建一個「用戶」的模式:在軌/遷移更新機型
script/generate model User username:string
這與遷移RB文件來創建用戶表一起創建user.rb文件。現在,我想爲我的用戶模型添加一個電子郵件列。什麼是最好的方式來做到這一點?我是否手動執行並手動編寫遷移文件,或者有沒有捷徑可以做到這一點?如果我手動編寫遷移,是否必須按照與以前的遷移腳本(前面帶有時間戳)相同的方式命名它,以確保它在上次遷移後運行?
比方說,我用下面的命令來創建一個「用戶」的模式:在軌/遷移更新機型
script/generate model User username:string
這與遷移RB文件來創建用戶表一起創建user.rb文件。現在,我想爲我的用戶模型添加一個電子郵件列。什麼是最好的方式來做到這一點?我是否手動執行並手動編寫遷移文件,或者有沒有捷徑可以做到這一點?如果我手動編寫遷移,是否必須按照與以前的遷移腳本(前面帶有時間戳)相同的方式命名它,以確保它在上次遷移後運行?
不要擔心時間戳。它會自動生成。 你可以做一個
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及以上)追加在文件名前面。
Guide有關於生成遷移的信息。如果您使用的鐵軌發電機,它會創建正確命名的文件:
ruby script/generate migration AddEmailToUser email:string
那麼你可以做兩件事情:
1)如果你還沒有部署任何地方這樣呢,或者你不介意轉儲數據庫並再次運行您的遷移,然後修改文件。從你的數據庫中刪除表,然後運行db:migrate。容易在開發中做到這一點。
2)如果此應用程序正在生產中,或者您不想刪除所有表格。然後創建一個新的遷移文件。然後在這個新的遷移中添加/修改/刪除該列。然後運行db:migrate,新的更改將在您的表中生效。這是最佳做法。
至於命名您的遷移,使用時間戳,因爲軌道將創建一個表,跟蹤最新的遷移運行。爲此,最好使用時間戳。但是,如果您選擇,您可以使用自己的約定而不是時間戳。也許將它們命名爲001_migration.rb,002_migration.rb等。
希望有所幫助。