2012-09-08 51 views
0

我正在對當前項目進行相當陡峭的重構。在到達這個十字路口之前,我有兩個模型,我認識到它們是真正的模型,但是處於不同的狀態,我想用這種方式表示系統。因此,我必須將即將停止使用的模型的所有對象移動到其他模型中,並正確設置新的狀態列。問題很簡單,尤其是因爲模型非常相似。活動記錄遷移和重構

對我來說,痛苦之處在於我必須在兩個方向的遷移過程中在某個中點進行這些更改。從這裏到那裏的路徑將是有點像:

add_column :model_ones, :status, :string 

make_all_model_two_records_into_model_one_records() 

drop_table :model_twos 

很明顯,其他方向容易界定以及

create_table :model_twos do |t| 
    ... 
end 

move_model_ones_with_status_x_into_model_twos_table 

remove_column :model_ones, :status 

這是一個很好的,但是當我到達那個神奇的時刻,我從我的回購中刪除ModelTwo.rb,然後整個事情都會發生。在那個時候,我不可能永遠從頭開始移動,而不去讀那個源文件。我對此的反應是要麼直接寫sql以便來回移動數據,要麼將數據轉換移出遷移。如果我把它拿出來,它到底在哪裏?我如何確保它在遷移的正確時間發生?

讓我們說我克服了這個問題的方面,現在我可以從零開始愉快地遷移到現在。我永遠不會遷移,對吧?這是否代表某個時刻,階段性遷移的概念對我來說簡直就是死的?

我想我可以回去按摩早期的遷徙以說服世界ModelTwo從來沒有存在過,但是認爲違反現有遷徙的神聖使我的皮膚爬行。

人們必須在Rails已經在某處進行這種重構。它必須是可行的,對吧?我無法弄清楚如何去做。

由於提前, JD

+0

我沒有看到問題。爲什麼你不能在「model_twos」放棄之後「從頭開始移植」?它被創建並再次丟失......這有什麼問題? – Mischa

回答

1

我想:

  1. 創建遷移,增加了狀態欄

  2. 運行rake任務跨越

  3. 移動數據

    測試所有正確移動的數據

  4. 運行另一次遷移以刪除不需要的舊錶。

有時您需要更改舊的遷移以確保您可以輕鬆構建開發環境。我不確定你爲什麼認爲這是一個問題。遷移在那裏幫助你,而不是你應該遵守的一些魔法規則。

有些時候,你可能太過於掛斷最佳實踐,忘記了適用於每種情況的「最佳實踐規則」是非常困難的。他們作爲指導是很好的,但最終的最佳實踐是爲您的項目做最好的事情。