我想通过迁移将一列添加到表中。有没有办法将它添加到特定位置,而不是作为最后一列?我可以在API文档中找到任何“订单”选项。有没有办法在ActiveRecord迁移中控制列顺序?
1
A
回答
2
我不认为有可能通过“本地”迁移来完成此操作。原因是许多数据库不支持在任意位置添加列。你需要通过不支持它的数据库来做到这一点是不重要的。
如果您的数据库确实支持它并且您不希望支持多个数据库,那么您可以直接在您的迁移中使用执行语句。
3
事实上,这不是migrations API的一部分,但如果您愿意放弃供应商中立性(并且您的数据库支持它),那么实现它可能相当容易。
如果你使用的是MySQL,这是MysqlAdapter的一个monkey-patch,它会添加选项:after和:first到add_column和change_column。 (See here for the relevant MySQL ALTER TABLE syntax)
ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do
def add_column_options!(sql, options)
super
if options[:after]
sql << " AFTER #{quote_column_name(options[:after])}"
elsif options[:first]
sql << " FIRST"
end
end
end
所以现在
a.add_column :foos, :bar, :string, :null => false, :limit => 20, :after => "baz"
将执行
ALTER TABLE `foos` ADD `bar` varchar(20) NOT NULL AFTER `baz`
和
a.add_column :foos, :bar, :string, :null => false, :limit => 20, :first => true
将执行
ALTER TABLE `foos` ADD `bar` varchar(20) NOT NULL FIRST
同样对于change_column。
相关问题
- 1. 有没有办法根据rails迁移制作一个DB图?
- 2. 有没有办法在迁移过程中将JSON导入Realm?
- 3. 有没有办法不生成在rails中的迁移文件
- 4. 有没有办法改变WPF中的绘制顺序
- 5. 有没有办法使用HashWithIndifferentAccess序列化ActiveRecord的JSON属性?
- 6. 有没有办法设置Xstream序列化的顺序
- 7. 有没有办法将SourceSafe与HISTORY迁移到SVN中?
- 8. 有没有办法控制Stripes框架错误消息的顺序?
- 9. 有没有办法按特定顺序存储PyTable列?
- 10. 有没有办法在视觉树中移动控件? (WPF)
- 11. Add_column迁移列顺序
- 12. 有没有办法将Cassandra 1.2的数据迁移到Cassandra 1.1?
- 13. 有没有办法解决Rails删除的迁移?
- 14. 有没有办法将SharePoint迁移到Confluence?
- 15. 有没有办法将SQL Server迁移到Vistadb(Umbraco)
- 16. 有没有办法将断点附加到Django South迁移?
- 17. EF 4.3数据库迁移 - 有没有办法忽略错误?
- 18. 有没有办法在SQL中应用移动限制>
- 19. 有没有办法在控制器中获取PartialView HTML内容?
- 20. 有没有办法在rails 3.1中修复单个控制器?
- 21. 有没有办法说∃!在序言中?
- 22. 有没有办法查看xcode中包含文件的顺序
- 23. 有没有办法配置南迁移没有问任何问题?
- 24. 有没有办法在控制器方法之前检查控制器参数?
- 25. 有没有办法在Android应用程序中打印到控制台?
- 26. 有没有办法在控制台程序中获取图形对象?
- 27. 有没有办法在应用程序中控制辅助触摸?
- 28. 有没有办法在Silverlight或WPF应用程序中模拟控制台?
- 29. 如何在迁移期间控制创建字段的顺序
- 30. 有没有办法让ExtJS 4.0应用程序中的所有控制器
你为什么要这样做? – klochner 2009-06-04 21:38:05