2011-02-24 2 views
4

나는 이미 많은 데이터베이스 (약 40 개)로 데이터베이스를 정의했다. 이제는 각 테이블에 특정 열을 추가하려고합니다. 예를 들어 created_byupdated_by이되도록합시다.모든 테이블에 특정 필드가 포함되도록 지정하려면 어떻게해야합니까?

마이그레이션을 거치지 않고 수동으로 업데이트하지 않고도이 작업을 수행 할 수있는 방법이 있습니까?

나는 당신이 마흔 마이그레이션을 필요가 없습니다 레일 2.3.8

답변

11

당신은 하나의 마이그레이션을 생성 할 수 있으며이 코드를 넣어 : 당신은 예를 들어, 하나의 마이그레이션을 할 수 있습니다. 그것은 모든 테이블의 배열 (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 
관련 문제