移行を使用してテーブルに列を追加したいとします。最後の列ではなく、特定の位置に追加する方法はありますか?私はAPIのドキュメントで "注文"オプションを見つけることができました。ActiveRecordの移行で列の順序を制御する方法はありますか?
1
A
答えて
2
「ネイティブ」の移行でこれを行うことは可能ではないと思います。これは、多くのデータベースが任意の場所に列を追加することをサポートしていないためです。それをサポートしていないデータベースでこれを行うために必要なフープは自明ではありません。
データベースでサポートされていて、複数のデータベースをサポートしない場合は、マイグレーション内で直接execute文を使用できます。
3
これは実際には移行APIの一部ではありませんが、ベンダーの中立性を放棄して(DBがサポートしていれば)、実装するのはかなり簡単です。
MySQLを使用している場合は、オプションを追加するMysqlAdapterへのモンキーパッチがあります:afterと: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. Codeceptionのテスト順序を制御する方法はありますか?
- 2. NGINX 'Location'ディレクティブマッチングの順序を制御する方法は?
- 3. RestAssuredでフィルタの順序を強制する方法はありますか?
- 4. バーチャルアースのレイヤー順序を制御する方法
- 5. .NET XmlSerializerが属性を出力する順序を制御する方法はありますか?
- 6. リピータ制御でのアイテムの順序
- 7. ReSharperがユニットテストを実行する制御の順序
- 8. ggplot2でfacet_grid/facet_wrapの順序を制御していますか?
- 9. 順序を制御するインターセプタが実行される
- 10. Pythonでウィンドウを制御する方法はありますか?
- 11. KMLアイコンの描画順序を上から下に制御する方法
- 12. JAXBのメモリ内スキーマ生成順序/シーケンスを制御する方法は?
- 13. ElasticSearchのトークンフィルタの制御順序
- 14. Install ShieldのSQLスクリプトの制御順序
- 15. 後続のRails 3 ActiveRecordの移行でid列を削除する方法はありますか?
- 16. 南の移行の順序を変更する方法
- 17. LinuxのUSBプローブの順序を変更または制御できますか?
- 18. ファクタから出力式の順序を制御する
- 19. EMBEDコードビデオを制御する方法はありますか?
- 20. 剣道UIグリッドでグループの順序を制御する
- 21. OCUnitでユニットテストメソッドの順序を制御する
- 22. JMHを使用してメソッドの順序を制御します
- 23. EclipseLinkがテーブルを作成するときに列の順序を制御する
- 24. MDIアプリケーションによって開かれたファイルの順序を解釈したり、制御する方法は?
- 25. アンドロイド:ポップアップのオーバレイ順序を制御します
- 26. 静的オブジェクトのコンストラクタの順序を制御する
- 27. クロスドメインのJavaスクリプトの読み込み順序を制御する
- 28. ImageSwitcherの移行時間を制御する方法
- 29. pytest-xdistがテストを並行して実行する方法を制御する方法はありますか?
- 30. neo4jのノードプロパティの順序リストをトラバースする方法はありますか?
なぜあなたはこれをしたいですか? – klochner
@klochner - 私はOPのために答えることはできませんが、自分のデータベースを直接見ると、関連する列をグループ化しておくと便利です。右など –