2011-01-11 13 views
3

私は、他のアプリケーションの統計情報のビューポートとして機能するレポート作成システムとログシステムに取り組んでいます。私はActiveRecordのORM機能を望んでいますが、手元にあるアプリケーションのDB構造は持っていません。Railsでのランタイムクラスの作成。私はこれをどのように扱うべきですか?

余分なデータベースはdatabase.ymlで定義されており、クラスに接続します。私はその場で(テーブルから)クラスを作成し、

  • は彼らが外部データベースのテーブル
  • にマップする必要があり

    1. にできるようにする必要があります

      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 
      

      は私が間違ってこれに近づいてアム? ダイナミッククラス作成を可能にしながら、外部データベースの名前空間をより適切にする方法を教えてください。

      提案とお手伝い

    +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

    私の場合は、アプリケーションのデータベース名が一意であることを保証していました...そして生成される定数はその名前から外れていました。 –

    関連する問題