在Rails中创建运行时类。我该怎么处理?

时间:2011-01-11 08:39:33

标签: ruby-on-rails ruby metaprogramming

我正在开发一个报告和日志记录系统,它将充当其他应用程序统计信息的视口。我想要ActiveRecord的ORM功能,但手头没有应用程序的数据库结构。

额外的数据库在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. 让他们映射到外部数据库的表
  3. 我接近这个错误吗? 我如何才能更好地命名外部数据库,同时允许动态创建类。

    建议和帮助表示赞赏。

1 个答案:

答案 0 :(得分: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      

这与你的方法非常类似。