簡體   English   中英

在 rails/migrations 中更新模型

[英]Updating models in rails / migrations

假設我使用以下命令創建了一個“用戶”模型:

script/generate model User username:string

這將創建 user.rb 文件和遷移 rb 文件以創建用戶表。 現在,我想向我的用戶模型添加一個電子郵件列。 這樣做的最佳方法是什么? 我是手動完成並手動編寫遷移文件還是有快捷方式? 如果我手工編寫遷移,我是否必須像以前的遷移腳本一樣命名它(前面有時間戳)以保證它在上一次遷移之后運行?

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

rails 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 及更高版本)的時間戳。

指南包含有關生成遷移的信息。 如果您使用 rails 生成器,它將創建正確命名的文件:

ruby script/generate migration AddEmailToUser email:string

那么你可以做兩件事:

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

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

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

希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM