私は次の移行を行っています。 1つの変更で3つ以上の変更を実行する方法はありますか?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つの変更で3つ以上の変更を実行する方法はありますか?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
短い答えはノーです。 change_column
メソッドは、テーブル名、カラム名、およびオプションハッシュの引数を取るように設定されています。 change_column
のソースコードは、ここで見つけることができる:https://github.com/rails/rails/blob/0fe76197d2622674e1796a9a000995a7a1f6622b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
change_column
方法における唯一のラインがある:第一引数として渡されたテーブル名をALTER
スクリプトを実行 execute("ALTER TABLE #{quote_table_name(table_name)} #{change_column_sql(table_name, column_name, type, options)}")
。引数としてテーブル/カラムの配列を渡すことはできないので、一度に1つずつ行う必要があります。このパラダイムは、Railsの移行ではかなり一般的です。
3つの移行を実行することに心配しているのはなぜですか?この種のことはRailsアプリにとってはまったく正常です。 –