通过一次迁移更改来更改多个列

mik*_*h77 2 activerecord ruby-on-rails

我有以下迁移.有没有办法在一次变化中运行这些变化而不是3?

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
Run Code Online (Sandbox Code Playgroud)

NM *_*ker 7

最简洁的答案是不.该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迁移中非常典型.