9
A
回答
17
Rails在ActiveRecord ConnectionAdapter上有一个名为rename_column
的迁移命令。您可以生成迁移,然后自己编写代码。例如(MySQL的):
script/generate migration rename_my_column_by_hand
然后编辑它创建的文件:
class RenameMyColumnByHand < ActiveRecord::Migration
def self.up
rename_column :my_table, :old_name, :new_name
end
def self.down
rename_column :my_table, :new_name, :old_name
end
end
它执行SQL这样的:
ALTER TABLE my_table CHANGE old_name new_name BIGINT;
注意这仅重命名列,它赢得了”不要重新命名其他表上的任何引用。
2
伟大的问题。不幸的是,答案是否定的。见的Rails 2.3.5源代码:
lib/rails_generator/generators/components/migration/migration_generator.rb
由迁移发生器识别的唯一关键字是add
,remove
,和to
/from
。
1
我在这里使用了一些技巧。假设我想将列foo更改为bar。
创建迁移下面的步骤
- 添加一个临时列temp_foo
- 更新的所有记录,在temp_foo
- 节省Foo的价值添加条列
- 更新的所有记录,保存temp_foo的value in bar
- Drop column foo
- Drop column temp_foo
这是非常脆弱的。如果一步失败,你可能会丢失数据..
相关问题
- 1. Rails 3.2.1 - 重命名路由
- 2. rails重命名关联
- 3. Rails重命名路由
- 4. Rails 4 - 重命名主键
- 5. 重命名Rails数据库
- 6. Rails循环重命名
- 7. 在Rails中重命名会话表
- 8. 在rails中重命名路由3
- 9. Rails:在url中重命名模型
- 10. Rails 3条中重命名路线
- 11. PG :: UndefinedColumn在Rails重命名后列
- 12. 重命名ActiveRecord/Rails的created_at,updated_at列
- 13. Rails:重命名全球化专栏
- 14. 重命名AXLSX的Rails参数
- 15. Rails 3重写命名路由
- 16. rails迁移和重命名blob列(sqlite)
- 17. Rails /重命名或移动文件
- 18. 重命名Rails 4应用程序
- 19. Rails的嵌套组和列重命名
- 20. Rails 5重命名CRUD路由
- 21. Rails Gem“Axlsx” - 重命名工作簿
- 22. 我如何重写rails命名约定?
- 23. Rails - 重命名宁静路线
- 24. 重命名Rails 4.1.0应用 - 无法从Rubymine中移除名称
- 25. 在Rails模型中重命名字段名称
- 26. Rails在URL中动态重命名模型名称
- 27. IntelliJ在Java中用Spock重命名重命名 - 不重命名测试文件
- 28. 重命名DataTable中
- 29. 在.net中重命名命名空间
- 30. 在MonoTouch中重命名命名空间
可能重复[如何在使用迁移的rails中重命名数据库列?](http://stackoverflow.com/questions/1992019/how-to-rename-a -database-column-in-rails-using-migration) – CharlesB 2012-05-30 05:37:37