多くのテーブル (約 40) を含むデータベースを既に定義しているとします。各テーブルに特定の列を追加したいことがわかりました。例のために、 と
created_by
とし updated_by
ます。
40回の移行を経ずに、それぞれを手動で更新することなく、これを簡単に行う方法はありますか?
私はレール2.3.8を使用しています
多くのテーブル (約 40) を含むデータベースを既に定義しているとします。各テーブルに特定の列を追加したいことがわかりました。例のために、 と
created_by
とし updated_by
ます。
40回の移行を経ずに、それぞれを手動で更新することなく、これを簡単に行う方法はありますか?
私はレール2.3.8を使用しています
単一の移行を生成し、このコードをその中に入れることができます。すべてのテーブルの配列 (Rails が自動的に作成する "schema_migrations" テーブルを除く) を提供し、各テーブルに列を追加します。
tables = ActiveRecord::Base.connection.tables - ["schema_migrations"]
tables.each do |table|
add_column table, :created_by, :integer
end
40回の移行は必要ありません。たとえば、移行は1回だけ行うことができます。
def self.up
%w(table1 table2 table3).each do |table_name|
ActiveRecord::Base.connection.execute "ALTER TABLE #{table_name} ADD created_by int, updated_by int"
end
end
この質問/回答は、すべてのテーブルのエンコーディングを修正するのに役立ちました...
class FixCharacterSet < ActiveRecord::Migration
def up
tables = ActiveRecord::Base.connection.tables - ["schema_migrations"]
tables.each do |table|
ActiveRecord::Base.connection.execute "ALTER TABLE #{table} CONVERT TO CHARACTER SET utf8 COLLATE 'utf8_general_ci';"
end
end
def down
end
end