Ruby on rails 使用一次迁移更改更改多个列

Ruby on rails 使用一次迁移更改更改多个列,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有以下迁移。是否有一种方法可以在一个更改中运行这些更改,而不是在三个更改中运行 def change change_column :comments, :attr_1, :string, null: true change_column :comments, :attr_2, :string, null: true change_column :comments, :attr_3, :string, null: true end 简短的回答是否。change\u column方法配置为

我有以下迁移。是否有一种方法可以在一个更改中运行这些更改,而不是在三个更改中运行

def change
 change_column :comments, :attr_1, :string, null: true
 change_column :comments, :attr_2, :string, null: true
 change_column :comments, :attr_3, :string, null: true
end

简短的回答是否。
change\u column
方法配置为获取表名、列名和选项哈希的参数。
change\u列
的源代码可在此处找到:

change\u列
方法中的唯一一行是:
execute(“ALTER TABLE”{quote\U TABLE\U name(TABLE\U name)}{change\U column\U sql(TABLE\U name,column\U name,type,options)}


它对作为第一个参数传递的表名执行
ALTER
脚本。不能将表/列数组作为参数传递,因此必须一次传递一个。这种模式在Rails迁移中相当典型。

只是好奇,为什么您要担心运行三次迁移?对于Rails应用程序来说,这种事情是完全正常的。我知道这条评论非常古老,但万一有人回来。对我来说,我有一个非常大的表,我需要更改多个列,这将强制每个语句重新索引和表锁。虽然我对变更期间的一些停机时间没有意见,但3倍的停机时间是不现实的。不幸的是,ALTER TABLE无法解决此问题: