回答
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. 如何更新新的迁移更改?
- 3. Yii迁移更新
- 4. 从Rails 1.2.3应用升级时如何更新迁移?
- 5. 如何在rails 3.x迁移中更改新列的位置
- 6. Rails DB迁移错误,Rails重新运行以前的迁移?
- 7. Rails迁移和列更改
- 8. 如何测试Rails迁移?
- 9. 更改迁移文件的表后,如何更新数据库?
- 10. Objective-C Realm迁移:新表迁移
- 11. 南迁移不更新psql表(django)
- 12. 不使用rails中的迁移更新数据库模式
- 13. rails HABTM迁移
- 14. Rails迁移
- 15. 迁移更新Laravel 5
- 16. Rails迁移以使用来自相关表的数据更新数据库table_one
- 17. 使用Rails更改表格信息迁移
- 18. 使用迁移更新列Laravel 5.4
- 19. 更新Eclipse时,如何迁移插件列表?
- 20. 如何使用Rails :: Generators.invoke(“active_record:migration”)生成创建表迁移文件?
- 21. Rails 4:将所有迁移重新迁移到Schema
- 22. 如何迁移类似于Ruby on Rails迁移的Django模型?
- 23. 标记Rails迁移的迁移
- 24. Rails迁移未生成迁移文件
- 25. 在Rails迁移中迁移数据
- 26. 如何使用代码优先迁移来更新数据库?
- 27. Rails的迁移,更改:id列型
- 28. 如何迁移递归表?
- 29. 迁移列 - Rails的
- 30. Rails的add_test_data迁移
为什么它必须是轨道迁移?它可以只是SQL(假设你正在使用SQL DB)查询来更新表? –
什么样的列类型是'country_code',你期望它保存'null',''''和'1'?或者用'1'表示你真的是指'1'吗? –