2011-02-24 6 views
4

私はすでにたくさんのテーブルでデータベースを定義しています(約40)。各テーブルに特定の列を追加したいと思いました。この例のために、それは created_byupdated_byとなります。すべてのテーブルに特定のフィールドを含めるように指定するにはどうすればよいですか?

これを行うには、40の移行を経ずに手動でそれぞれを更新する必要があります。

私はあなたが40のマイグレーションを必要としないレール2.3.8

答えて

11

たとえば、1回のマイグレーションを作成してこのコードを入力することができます。これは、すべてのテーブルの配列(Railsが自動的に作成する "schema_migrations"テーブルを除く)を提供し、それぞれにカラムを追加します。

tables = ActiveRecord::Base.connection.tables - ["schema_migrations"] 
tables.each do |table| 
    add_column table, :created_by, :integer 
end 
+0

これはまさに私が探していたものです。 – Calin

+0

Greate!きれいで簡単:) – fl00r

+0

@Dylan、what新しいテーブルを作成する場合、レールが "created_at"と "updated_at"を追加するときに新しいテーブルを自動的に作成するときに、 –

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

おかげで私を助けました。それでも、私は他のソリューションをよりクリーンかつ簡単に見つける。 – Calin

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 
関連する問題