2012-06-11 75 views
5

我需要即时创建一个Ruby类,即动态地创建一个来自ActiveRecord::Base的Ruby类。我用eval暂且:在没有eval的情况下即时创建一个Ruby类

eval %Q{ 
    class ::#{klass} < ActiveRecord::Base 
    self.table_name = "#{table_name}" 
    end 
} 

有等价物,且至少同样简洁的方式来做到这一点,而无需使用eval

回答

4

当然,还有:)

class Foo 
    class << self 
    attr_accessor :table_name 
    end 
end 

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

Bar.table_name # => "bars" 
14

可以使用Class类,它的类的实例。困惑了吗? ;)

cls = Class.new(ActiveRecord::Base) do 
    self.table_name = table_name 
end 

cls.new 
+0

这就是它,谢谢。我知道类也是对象;但我不知道有可能把基地级别作为一个论点,特别是关于这个区块(事后看来,我应该猜到了)。 – DrTom

相关问题