2013-05-30 43 views
4

這裏是Rails的新手。幾個關於遷移的問題:銷燬無效遷移

  1. 我創建了一個不再需要的遷移。我想刪除它。正確的命令是簡單的rails destroy migration AddMyColumnToMyModel

  2. 假設我錯誤地輸入了我想要銷燬的遷移名稱......當我嘗試銷燬不存在的遷移時,會發生以下情況。

    $ rails destroy migration Blah 
        invoke active_record 
        remove migration.rb 
    

    它說這是刪除migration.rb ...這是一件壞事嗎?

回答

5
  1. 當然,這是正確的命令。只是要小心:如果你確實不必要的遷移使用rake db:migrate將更改提交到數據庫,請務必先天下之憂運行此:

    rake db:rollback 
    

    什麼,它是在運行down方法你最新的遷移。它的確如此:

    rake db:migrate:down VERSION=20130529014413 
    

    其中版本號與最新的遷移相對應。它也可以採取STEP參數的情況下,你需要回滾一堆遷移,而不是隻有一個,像這樣:

    rake db:rollback STEP=3 
    

    當然,如果你只是產生您不需要的遷移和絕然之,沒有必要回滾任何東西。您可以使用您發佈的命令或手動刪除相應的文件以擺脫它。

    來源:http://guides.rubyonrails.org/migrations.html#rolling-back

  2. 別擔心,這不是做任何事情在你的代碼。

+0

謝謝@depa。所以正確的過程是:1)運行db:rollback,2)在遷移上運行destroy命令?我是否需要將任何參數傳遞給db:rollback?例如。它如何知道回滾到哪裏? – Ricky

+0

它回滾最新的遷移。檢查我更新的答案。請記住,如果您只生成*遷移,但沒有運行它,則無需再滾動任何東西。 – depa

+0

對不起@depa,關於這個db:rollback的最後一個問題。我明白,當遷移中定義了'up'和'down'方法時,它們對應於應用遷移和回滾...但是,我的遷移僅具有「更改」方法。這是否意味着Rails會自動推斷出適當的回滾動作是什麼? – Ricky