4

多くのテーブル (約 40) を含むデータベースを既に定義しているとします。各テーブルに特定の列を追加したいことがわかりました。例のために、 と created_byとし updated_byます。

40回の移行を経ずに、それぞれを手動で更新することなく、これを簡単に行う方法はありますか?

私はレール2.3.8を使用しています

4

3 に答える 3

12

単一の移行を生成し、このコードをその中に入れることができます。すべてのテーブルの配列 (Rails が自動的に作成する "schema_migrations" テーブルを除く) を提供し、各テーブルに列を追加します。

tables = ActiveRecord::Base.connection.tables - ["schema_migrations"]
tables.each do |table|
  add_column table, :created_by, :integer
end
于 2011-02-24T21:55:19.093 に答える
1

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
于 2011-02-24T21:53:08.737 に答える
0

この質問/回答は、すべてのテーブルのエンコーディングを修正するのに役立ちました...

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
于 2012-07-30T16:31:16.477 に答える