回答
class UpdateCountryCodeColumnUsers < ActiveRecord::Migration
def up
execute %Q(
UPDATE users
SET country_code = 1
WHERE country_code IS NULL OR country_code = ""
)
end
end
對於字符串使用雙引號僅適用於某些數據庫,標準SQL對於字符串和標識符(如表和列名稱)使用單引號和雙引號。 –
@ muistooshort,我對此不知道,謝謝 –
你可能不應該改變在遷移數據,只用它來改變模式。
許多開發人員使用rake db:reset將不會運行此遷移。
更好的解決方案是創建一個rake或thor任務作爲一個關閉或簡單地執行SQL。
爲什麼不應該在遷移中更改數據?那麼'db:reset'是如何相關的?創建一個獨立的rake或者thor任務來處理你剛剛扔掉的東西,看起來好像它會把你的源代碼樹與那些永遠不會再使用的東西混雜在一起。這對於我來說似乎是一個完美的工作。 –
def UpdateCountryCodeForUsers < ActiveRecord::Migration
def up
Users.where("country_code = '' or country_code = NULL")
.update_attributes({country_code: 1})
end
end
謝爾蓋的回答是你最好的選擇,將更新數據(這將是第一需要 - 而且是非常重要的),它可以讓數據庫做的工作。如果您還需要設置前進的默認值(在Sergei提出更新之後),您可以進行單獨的遷移(以單獨的活動)幷包括以下內容...
您還可以使用rails遷移幫助程序方法change_column_default
change_column_default :users, :country_code, from: nil, to: 1
如果你想使它可逆只是使用change_column
...
def up
change_column :users, :country_code, :string, default: 1
end
def down
change_column :users, :country_code, :string, default: nil
end
- 1. Rails新遷移不更新舊數據
- 2. Rails遷移表
- 3. 如何更新新的遷移更改?
- 4. Rails如何恢復遷移更改?
- 5. 如何在rails 3.x遷移中更改新列的位置
- 6. 從Rails 1.2.3應用升級時如何更新遷移?
- 7. Yii遷移更新
- 8. Rails DB遷移錯誤,Rails重新運行以前的遷移?
- 9. Rails遷移和列更改
- 10. 如何測試Rails遷移?
- 11. 如何在更新期間遷移SharedPreferences?
- 12. Laravel遷移更改/更新
- 13. 更改遷移文件的表後,如何更新數據庫?
- 14. Objective-C Realm遷移:新表遷移
- 15. Rails的遷移創建表
- 16. Rails代表中斷遷移
- 17. 遷移到cakephp 2.x - 更新列表
- 18. 南遷移不更新psql表(django)
- 19. 不使用rails中的遷移更新數據庫模式
- 20. Rails has_and_belongs_to_many遷移
- 21. rails HABTM遷移
- 22. Rails遷移
- 23. sequelize postgresql更新遷移
- 24. 遷移更新Laravel 5
- 25. Flyway遷移更新架構
- 26. 遷移問題更新MySQL
- 27. Rails遷移以使用來自相關表的數據更新數據庫table_one
- 28. 如何在Active Record/Rails 4遷移中使用唯一索引創建新表
- 29. 使用Rails更改表格信息遷移
- 30. 更新Eclipse時,如何遷移插件列表?
爲什麼它必須是軌道遷移?它可以只是SQL(假設你正在使用SQL DB)查詢來更新表? –
什麼樣的列類型是'country_code',你期望它保存'null',''''和'1'?或者用'1'表示你真的是指'1'嗎? –