2016-09-20 31 views
1

我有以下迁移。有没有办法在一次更改中运行这些更改?通过一次迁移更改多个列

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 
+1

只是好奇,为什么你关心运行三个迁移?这种事情对于Rails应用程序来说是完全正常的。 –

回答

6

简短的回答是否定的。 change_column方法被配置为采用表名,列名和选项哈希的参数。为change_column的源代码可以在这里找到:https://github.com/rails/rails/blob/0fe76197d2622674e1796a9a000995a7a1f6622b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

change_column方法的唯一路线是: execute("ALTER TABLE #{quote_table_name(table_name)} #{change_column_sql(table_name, column_name, type, options)}")

,其执行作为第一参数传递的表名的ALTER脚本。你不能传递一个表/列的数组作为参数,所以你必须一次做一个。这个范例在Rails迁移中相当典型。