无需eval即可动态创建Ruby类

无需eval即可动态创建Ruby类,ruby,metaprogramming,eval,Ruby,Metaprogramming,Eval,我需要动态地创建一个Ruby类,它派生自ActiveRecord::Base。我暂时使用eval: eval %Q{ class ::#{klass} < ActiveRecord::Base self.table_name = "#{table_name}" end } eval%Q{ 类::#{klass}

我需要动态地创建一个Ruby类,它派生自
ActiveRecord::Base
。我暂时使用
eval

eval %Q{
  class ::#{klass} < ActiveRecord::Base
    self.table_name = "#{table_name}"
  end
}
eval%Q{
类::#{klass}
有没有一种不使用
eval
的等效且至少同样简洁的方法可以做到这一点?

当然有:)

class-Foo
“酒吧”类
您可以使用类,其中类是实例。困惑了吗?;)


就是这个,谢谢。我知道类也是对象;但我不知道可以将基类作为参数,特别是关于块的参数(事后看来,我应该猜到)。
class Foo
  class << self
    attr_accessor :table_name
  end
end

Bar = Class.new(Foo) do
  self.table_name = 'bars'
end

Bar.table_name # => "bars"
cls = Class.new(ActiveRecord::Base) do
  self.table_name = table_name
end

cls.new