我在找一些提供下列資料:Rails如何在發佈後處理模型/默認值問題?
- 你有一個應用程序生活與客戶和真實數據
- 在開發新的功能,你需要添加一列來讓說,項目表
- 這種新列是某種類型的這是由模型使用before_save
這一切工作正常前進的新項目產生的UID。但是所有現有的項目都沒有這個專欄,一切都打破了。
你如何在Rails世界中處理他?
感謝
我在找一些提供下列資料:Rails如何在發佈後處理模型/默認值問題?
這一切工作正常前進的新項目產生的UID。但是所有現有的項目都沒有這個專欄,一切都打破了。
你如何在Rails世界中處理他?
感謝
我認爲這應該在遷移腳本內處理,而不是Rake任務。
如果我理解正確,那麼只需要在列添加到歷史記錄時執行一次。在我看來,遷移腳本不應該使用破損的數據集來保留應用程序。遷移不僅僅是模式更改。
下面是一個例子:
def self.up
change_table :projects do |t|
t.integer 'new_column'
end
Project.reset_column_information
Project.all.each do |project|
project.new_column = some_value
project.save
end
end
的reset_column_information方法讓Rails的知道你剛剛添加的新列的。
你可以簡單地創建一個在所有項目中拉不具有UID和一到每個項目rake任務。
運行遷移後,運行該任務。你所有的項目都應該有一個UID。
同意。如果這是一次性的事情,我通常只是將你在rake任務中的代碼直接放入遷移中,因爲它與遷移密切相關。或者,如果允許此列的nil值,則更改引用此列的應用程序部分並適當處理它(檢查nil)。 – johnmcaliley 2010-11-19 05:25:45
+1表示建議創建一個rake任務。這是我會做的。 :) – Alex 2010-11-19 05:46:44
謝謝大家。我是新的,所以這是有幫助的,雖然似乎沒有任何關於這個主題的教程通過谷歌....在軌道上的目錄嗎?是否存儲rake任務,以便我可以在Heroku上運行它們?此外,任何方式你都可以更新你的答案,顯示rake任務的基本結構或佈局。 – AnApprentice 2010-11-19 06:07:50
我喜歡這個乾淨。在部署中不太記得,似乎更安全。謝謝史蒂夫。 – AnApprentice 2010-11-19 17:48:28