我試圖向我的db(key
)添加一個既是唯一也不爲空的列。在我的遷移中,我有填充列的代碼。問題在於遷移失敗,因爲它在添加數據之前添加了這個唯一/非空值約束,然後抱怨存在一個現有密鑰。在遷移中的唯一索引列上添加空約束
這是什麼東西,我需要兩個遷移 - 一個添加列/數據,然後稍後添加約束?或者這可以一次完成嗎?
我試圖向我的db(key
)添加一個既是唯一也不爲空的列。在我的遷移中,我有填充列的代碼。問題在於遷移失敗,因爲它在添加數據之前添加了這個唯一/非空值約束,然後抱怨存在一個現有密鑰。在遷移中的唯一索引列上添加空約束
這是什麼東西,我需要兩個遷移 - 一個添加列/數據,然後稍後添加約束?或者這可以一次完成嗎?
理想情況下,在這種情況下,建議創建一個名爲Stage Table(STG_YOUr table_name)的新表格,該表格非常類似於約束較少的原始表格。在此完成所有數據轉換/操作,然後準備好MERGE或插入原始生產表。
我不會建議在遷移中填充數據。我發現最好讓遷移只關注對數據庫結構的物理更改。你應該創建rake任務來操縱你的數據。真的,你應該在你的模型中放置數據操作方法(並且對它們進行單元測試),然後讓你的rake任務委託給這些方法。然後,您可以在運行所有遷移之後運行您的耙子任務,或者混合單個遷移和耙子任務。