我想通過遷移將一列添加到表中。有沒有辦法將它添加到特定位置,而不是作爲最後一列?我可以在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