2010-08-16 4 views
1

제품 분류 표와 제품 그룹 중 하나를 분류했습니다. 이제 ProductGroups가 제거되고 해당 데이터가 Products 테이블에 병합됩니다.레일 마이그레이션; 두 모델 합치기

기존 ProductGroup 레코드를 반복하여 제품으로 추가하는 마이그레이션 작업을 수행했습니다. 따라서 우리는 수백 개의 그룹을 수동으로 다시 입력 할 필요가 없습니다. 그런 다음 product_groups 테이블이 h 제됩니다.

그런 다음 ProductGroup 모델, 컨트롤러 등을 제거하고 변경 사항을 커밋했습니다.

이 모든 것이 개발 과정에서 잘 작동했지만, 이제 프로덕션 응용 프로그램을 업데이트하면 (예 : ProductGroup 모델 등을 제외하고) 파일 시스템 변경 내용이 적용되고 모델이 더 이상 존재하지 않으므로 마이그레이션이 실패합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 마이그레이션시 데이터 전송을 넣지 않아야합니까? 그것은 catch-22와 같은 느낌입니다.

답변

2

나는 문제가 무엇인지하지 않았다하지만 당신은 하나의 마이그레이션의 모든 작업을 수행하려는 경우는 제안을

class UpdateProducts < ActiveRecord::Migration 
    def self.up 
    add_column :products, :columns, :types 

    Product.all.each do |product| 
     product.update_attributes(ProductGroup.find_by_id(product.product_group_id).attributes) 
     product.save 
    end 

    system("ruby script/destroy scaffold product_group") 

    drop_table :product_groups 
    end 

    def self.down 
    remove_column :products, :columns 
    create_table :product_groups 
    end 
end 
+0

감사처럼 보일 수 있습니다, 그 사실은 더 많거나 적은 내가하고 결국 무엇; 먼저 데이터를 마이그레이션 한 다음 코드를 업데이트하여 ProductGroup 모델을 제거했습니다. 하지만 다른 사람이 내가 한 일을 모른 채 내 커밋을 적용했다면 문제가 발생했을 가능성이 큽니다. 또는 다른 사람이 나중에 자신의 레포를 업데이트해야하는 경우. 감사하게도 이번에는 문제가 아니었지만 (솔로 프로젝트), 미래를위한 더 나은 솔루션을 알고 싶습니다. –