2013-04-16 5 views
0

기존 스키마가있는 레거시 SQL 엔터프라이즈 데이터베이스 위에 응용 프로그램을 빌드하고 있지만 비슷하지만보다 일반적인 ActiveRecord 스키마로 PostgreSQL을 지원하고자합니다. 스키마 차이를 추상화하고 뷰와 컨트롤러에 대한 공통 인터페이스를 제공하는 각 데이터베이스에 대해 ActiveRecord 클래스 세트를 얻었습니다. environment/config에 따라 응용 프로그램 수준에서 사용되는 클래스 집합을 전환 할 수 있어야합니다.레거시 데이터베이스 추상화를위한 Ruby 인터페이스

다른 언어로도 환경에 적합한 클래스를 사용하여 객체를 생성하는 객체 팩토리가 있습니다. 하지만 저는 그러한 패턴이 루비에 과잉이라고 이해합니다.

두 개의 클래스, IssuePg 및 IssueLegacy가있는 경우 Issue.new에 대한 호출이 적절한 모델을 인스턴스화 할 수 있도록 내 애플 리케이션을 구성 할 수있는 방법이 있습니까? 변수에 클래스를 할당 할 수 있다는 것을 알지만, 레일스에서는 시스템 전체가 보이지 않고 스캐 폴딩과도 호환되지 않으므로 어디에서해야합니까? 그래서 문제를 중심으로 스캐 폴딩을 수행하고 나중에 환경에 따라 수퍼 클래스를 변경 할 수 있습니까?

각 환경별로 별도의 마이그레이션 세트가 필요합니까? 아니면 소스 제어 문제입니까?

if Rails.env['db_support'] == :legacy 
    require '/path/to/legacy/ar/objects' 
else 
    require '/path/to/normal/ar/objects' 
end 

이 모델을 편석 코드베이스를 조금 청소기를 유지 : 당신이 할 수있는

답변

0

한 heavyhanded 방법은 환경 또는 명령 줄 변수를 사용하여 다음과 같은 일을 할 것입니다.

+0

나는 그렇게 단순 할 수 있다고 생각합니다. 루비가 제공하는 모든 가능한 옵션에서 길을 잃었습니다. –

관련 문제