通过活动记录迁移将rename_column和change_column合二为一

时间:2014-04-29 10:55:36

标签: mysql ruby activerecord migration

我必须重命名表a列的一列并更改它的数据类型。我目前正在做以下事情:

class RenameIdFromA < ActiveRecord::Migration
  def change
    rename_column :a, :a_id, :id
    change_column :a, :id, :string, :limit => 50
  end
end

有没有办法一气呵成?

之类的东西
    rename_and_change_column :a, :a_id, :id, :string, :limit => 50

因为,可以通过以下查询一次性在MySQL中完成:

ALTER TABLE `a` CHANGE `a_id` `id` varchar(50) DEFAULT 0 NOT NULL

1 个答案:

答案 0 :(得分:1)

您可以使用execute按原样运行SQL,然后如果有人使用的是您支持的数据库引擎,则可以回退到默认方法。

class RenameIdFromA < ActiveRecord::Migration
  def change
    if ActiveRecord::Base.connection.adapter_name =~ /mysql/i
      execute "ALTER TABLE `a` CHANGE `a_id` `id` varchar(50) DEFAULT 0 NOT NULL"
    else
      rename_column :a, :a_id, :id
      change_column :a, :id, :string, :limit => 50
    end
  end
end