2011-01-11 4 views
3

다른 응용 프로그램의 통계에 뷰포트 역할을하는보고 및 로깅 시스템에서 작업하고 있습니다. 내가 ActiveRecord의 ORM 기능을 원하지만, 응용 프로그램의 DB 구조를 직접 가지고 있지 않아야합니다.레일즈에서 런타임 클래스를 생성합니다. 어떻게해야합니까?

추가 데이터베이스는 database.yml에 정의되어 있으며 클래스와 연결됩니다.

class externalapp < ActiveRecord::Base 
    establish_connection :externalapp_db 
end 

def create_class(class_name, superclass, &block) 
    klass = Class.new superclass, &block 
    Object.const_set class_name, klass 
end 

나는

  1. 즉시 (테이블에서) 클래스를 만들고
  2. 그들이 외부 데이터베이스의 테이블

에 매핑해야 할 수 있어야합니다 나는 잘못이 접근하고 있는가 ? 동적 클래스 생성을 허용하면서 어떻게 외부 데이터베이스의 네임 스페이스를 향상시킬 수 있습니까?

제안과 도움을 받으실 수 있습니다.

+0

귀하의 사용자 이름에 대해 Upvoted : P –

+0

:) 1 권의 서적. – EarlyPoster

답변

1

내가 과거에이 실험 한 :

constant_name = app.database_name.camelize + table_name.camelize 

    klass = Class.new(ActiveRecord::Base) 

    ActiveRecord::Base.const_set(constant_name, klass) 

    klass.class_eval do 
    set_table_name table_name    
    establish_connection(
     :adapter => "mysql", 
     :host  => app.database_host, 
     :username => app.database_username, 
     :password => app.database_password, 
     :database => app.database_name 
    )  
    end  

그래서 당신과 매우 유사한 접근.

+0

네, 비슷한 모양입니다. – EarlyPoster

+0

앱 이름 공간은 어떻게됩니까? – EarlyPoster

+0

제 경우에는 앱 데이터베이스 이름이 고유한지 확인했습니다 ... 생성 된 상수는 그 이름에서 제외되었습니다. –

관련 문제