2011-03-04 8 views
0

마이 그 레이션을 생성하는 동안 rails g migration xxxx을 통하지 않고 마이 그 레이션 응용 프로그램의 컬럼을 추가하려는 마이 그 레이션을 만들고 싶습니다. 나중에 사용할 수 있도록 마이 그 레이션을 위해 버전 번호를 저장하려고합니다.응용 프로그램에서 마이 그 레이션 만들기

시나리오는 일반화 된 테이블과 필드가있는 응용 프로그램입니다. 응용 프로그램을 여러 고객에게 배포 할 수 있습니다. 테이블의 사용자 정의 필드를 정의하는 방법을 제공하고자합니다. 일단 사용자가 table_name, field_name, data_type 등과 같은 원하는 데이터를 선택/입력하면 필자는 필드를 추가하고 데이터베이스의 어딘가에 버전 번호를 저장하는 새로운 마이그레이션을 작성합니다. 사용자가 필드를 삭제하기로 결정한 경우이 버전 번호는 migrate:down에 사용됩니다.

더 좋은 방법이 있습니까?

답변

1

나는 다음과 같이이 구현 : 나는 사용하여 마이그레이션 만든 field_nametable_name에 따라 : 나는 파일로 이주 명령을 생성 출력 및 검색 마이그레이션 번호를 리디렉션 한이 방법

def create_migration 
    field_name_for_db = field_name.gsub(' ', '_').downcase 
    migration_name = "add_column_#{self.field_name}_to_#{self.table_name}" 
    logger.info "cd #{Rails.root} && rails g migration #{migration_name} #{self.field_name}:string > #{Rails.root}/tmp/migration_details.txt && rake db:migrate" 
    system "cd #{Rails.root} && rails g migration #{migration_name} #{self.field_name}:string > #{Rails.root}/tmp/migration_details.txt && rake db:migrate" 
    migration_version = File.read("#{Rails.root}/tmp/migration_details.txt").split('/').last.split("_#{migration_name}").first 
    self.migration_name = migration_name 
    self.migration_version = migration_version 
    self.save 
    end 

을 파일에서 가져온 다음 데이터베이스에 저장하십시오.

관련 문제