是否有子类3的Rails 3替换?

时间:2010-11-04 03:07:55

标签: activerecord ruby-on-rails-3

我正在尝试获取特定类型的所有派生类。在Rails 2+中,您可以说:

Class.subclasses_of SomeClass

这是因为在Rails 3中,activesupport / lib / active_support / core_ext / object / extends.rb消失了。

Rails 3中有替代品吗?有替代品。

3 个答案:

答案 0 :(得分:2)

如果你想获得SomeClass的所有子类,那么你可以:

SomeClass.descendants

同样,如果要查找父类,请使用:

SomeClass.ancestors

这会将一个数组传给你,供你消费。从而允许你:

SomeClass.descendants.each { |klass| }

答案 1 :(得分:0)

总是有搜索ObjectSpace的选项 - 类似于:

classes = []
ObjectSpace.each_object(Class) do |klass|
  SomeClass > klass
end

这有点不稳定但有用。有了更多的背景,也许有更好的方法?

答案 2 :(得分:0)

也许我误解了你的问题。我从未在Rails 2中使用subslasses_of方法。在Rails 3中,我只使用Foo.descendants,它提供了一个继承自Foo的类(及其属性)数组。非常方便。