Действительно, это не является частью API миграции, но если вы хотите отказаться от нейтральности в отношении поставщиков (и ваша БД поддерживает это), это, вероятно, довольно легко реализовать.
Если вы используете MySQL, вот обезьяна-патч для MysqlAdapter, которая добавит опции: after и: first to add_column и change_column. ( См. Здесь для соответствующего синтаксиса MySQL ALTER TABLE .)
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.