Ruby在运行时生成子类

时间:2017-10-28 20:04:44

标签: ruby inheritance dynamic metaprogramming dynamic-class-loaders

我现在正面临一个问题。

我有一个父类Item(Model)。我有两个继承自Item的静态子类。

但是通过视图表单,我希望管理员用户能够在运行时创建一个新的Item子类。

class Item < ActiveRecord::Base
 #template methods
end

class StoreItem < Item
 #hooks for overriding template method
end

class OnlineItem < Item
 #hooks for overriding template method
end

在视图中,我想提供一个表单,用户可以在其中添加新名称并单击“创建”,然后动态创建新类。

我需要帮助:

  1. 如何实现这一目标。
  2. 也是元编程或我必须使用 工厂模式并提供默认类?

1 个答案:

答案 0 :(得分:1)

你是否寻找`Class.new(Item)``

示例:

require 'active_record'

class Item < ActiveRecord::Base
 #template methods
end

x = Class.new(Item)
puts x.ancestors

其中一个祖先是Item

顺便说一下:你的Class StoreItem < Item错了。在这种情况下,您必须使用class而不是Class。