我創建了以下遷移:插入Rails的兩個現有的遷移之間的遷移
class FixVoteColumnName < ActiveRecord::Migration
def change
rename_column :votes, :post_id, :votable_id
add_column :votes, :votable_type, :string
end
end
然後錯誤地創造了這個遷移,再次重命名列:
class ChangeVoteTableColumns < ActiveRecord::Migration
def change
rename_column :votes, :post_id, :votable_id
end
end
一旦運行耙這顯然會引發錯誤db:migrate:
== FixVoteColumnName: migrating ==============================================
-- rename_column(:votes, :post_id, :votable_id)
rake aborted!
An error has occurred, this and all later migrations canceled:
Missing column votes.post_id
當我第一次看到這個錯誤時,我只是刪除了se cond遷移(如在,將其移到我的垃圾箱文件夾中),運行rake db:再次遷移,然後繼續。在那之後,我創建了3次遷移併成功運行了它們。
當我推到Heroku時,這證明是有問題的。不知何故,Heroku仍在處理已刪除的遷移。我通過運行heroku運行rake db:schema:reload來實現它,但我知道這不是一個長期的解決方案。
我認爲我需要做的是將第二次遷移移回到我的db/migrate目錄中,並在兩者之間插入一個遷移,將votable_id重新命名爲:post_id,以便第二次遷移可以正常運行。我也可以運行rake db:rollback,但是由於遷移出現問題以後出現了一些遷移,這可能會變得混亂。
關於如何負責任地解決此問題的任何想法?這只是一個有趣的項目,所以丟棄數據庫並不是世界末日,但我想了解如何做到這一點,如果有的話。