5

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

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

是否有等效且至少同样简洁的方法可以在不使用的情况下执行此操作eval

4

2 回答 2

15

您可以使用Class类,其中类是实例。迷茫了吗?;)

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

cls.new
于 2012-06-11T12:48:42.803 回答
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"
于 2012-06-11T12:48:31.623 回答