在单表继承机制使用动态创建的类(Using dynamically created classes

2019-10-18 00:13发布

我有一个名为“DynObject”一个ActiveRecord类可以用于继承..

在初始化我动态地创建一些类,继承自它:

classes_config = { foo: 'foo', bar: 'bar' }

classes_config.each do |name,options|

  klass = Class.new( DynObject ) do

  end

  self.klasses[name] = const_set( "#{name.camelize}DynObject", klass )

end

这是所有的好,这些类创建就好了。但是当ActiveRecord的尝试加载生成记录STI机制failes .. (ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'FooObject'....))

我认为这是奇怪的,因为当我检查类,因为它们是如何命名的type列,它们的存在..

当我检查的ancestors这些类的它们也继承了就好了..

是否有可能就是我试图完成?

有没有别的东西,需要做的事情?

Answer 1:

您的错误信息表示是“FooObject”类不能被找到。

在你的代码,动态生成的类名shoudl是“FooDynObject”。

只是检查你不加载DynObject之前在你的数据库中的旧测试记录。

@edit:另一件事也知道你影响到动态类名的类。

class DynObject < ActiveRecord::Base
  const_set 'FooDynObject', Class.new(DynObject)
end

将导致DynObject :: FooDynObject和ActiveRecord的将无法加载它时,它会看到“FooDynObject”类型。

Personnally,我会做像成才

class DynObject < ActiveRecord::Base
  Object.const_set 'FooDynObject', Class.new(DynObject)
end


文章来源: Using dynamically created classes in a Single Table Inheritance mechanism