我需要动态创建一个Ruby类,即动态地派生自ActiveRecord::Base
。我暂时使用eval
:
eval %Q{
class ::#{klass} < ActiveRecord::Base
self.table_name = "#{table_name}"
end
}
在不使用eval
的情况下,是否有相同且至少同样简洁的方法?
答案 0 :(得分:14)
您可以使用Class类,其中的类是实例。困惑了吗? ;)
cls = Class.new(ActiveRecord::Base) do
self.table_name = table_name
end
cls.new
答案 1 :(得分: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"