【发布时间】:2014-06-15 06:32:39
【问题描述】:
我必须重命名表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
【问题讨论】:
-
据我所知不是开箱即用的。但我看不出您当前的解决方案有任何问题。它比你建议的另一个更清楚。
-
那个问题没有回答问题。 @aross:在表有太多数据并且此迁移将运行两个查询的情况下,这将有所帮助,这将花费两倍的时间,因为我们知道我们可以在一个查询中执行此操作。
-
然后你可以使用
execute来运行SQL。如果您还想支持其他数据库,您可以使用ActiveRecord::Base.connection.adapter_name检查您的数据库适配器,如果条件与您支持的数据库引擎不匹配,您可以使用rename_column和change_column。 (我用示例创建了一个答案。)
标签: mysql ruby activerecord migration