Создание класса времени выполнения в Rails.Как мне справиться с этим? - PullRequest
3 голосов
/ 11 января 2011

Я работаю над системой отчетов и ведения журналов, которая будет служить в качестве окна просмотра статистики других приложений.Мне нужна функциональность ORM ActiveRecord, но у меня нет структуры БД приложений заранее.

Дополнительные базы данных определены в 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. сопоставлять их с таблицами внешней базы данных

AmЯ подхожу к этому неправильно?Как я могу улучшить пространство имен внешних баз данных, в то же время позволяя создавать динамические классы.

Предложения и помощь приветствуются.

1 Ответ

1 голос
/ 11 января 2011

Я экспериментировал с этим в прошлом:

  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      

Так что довольно похожий подход к вашему.

...