私はすでにたくさんのテーブルでデータベースを定義しています(約40)。各テーブルに特定の列を追加したいと思いました。この例のために、それは created_by
とupdated_by
となります。すべてのテーブルに特定のフィールドを含めるように指定するにはどうすればよいですか?
これを行うには、40の移行を経ずに手動でそれぞれを更新する必要があります。
私はあなたが40のマイグレーションを必要としないレール2.3.8
私はすでにたくさんのテーブルでデータベースを定義しています(約40)。各テーブルに特定の列を追加したいと思いました。この例のために、それは created_by
とupdated_by
となります。すべてのテーブルに特定のフィールドを含めるように指定するにはどうすればよいですか?
これを行うには、40の移行を経ずに手動でそれぞれを更新する必要があります。
私はあなたが40のマイグレーションを必要としないレール2.3.8
たとえば、1回のマイグレーションを作成してこのコードを入力することができます。これは、すべてのテーブルの配列(Railsが自動的に作成する "schema_migrations"テーブルを除く)を提供し、それぞれにカラムを追加します。
tables = ActiveRecord::Base.connection.tables - ["schema_migrations"]
tables.each do |table|
add_column table, :created_by, :integer
end
を使用しています。
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
おかげで私を助けました。それでも、私は他のソリューションをよりクリーンかつ簡単に見つける。 – Calin
この質問/回答は...すべてのテーブルのエンコーディングを修正するために迅速な回答を
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
これはまさに私が探していたものです。 – Calin
Greate!きれいで簡単:) – fl00r
@Dylan、what新しいテーブルを作成する場合、レールが "created_at"と "updated_at"を追加するときに新しいテーブルを自動的に作成するときに、 –