2010-11-04 3 views
3

Я пытаюсь получить все производные классы для определенного типа. В Rails 2+, вы можете сказать:Есть ли замена Rails 3 для подклассов?

Class.subclasses_of SomeClass 

Это потому, что ActiveSupport/Библиотека/active_support/core_ext/объект/extending.rb ушел в Rails 3.

Есть ли замена в Rails 3? Существуют ли альтернативы.

ответ

0

Там всегда есть возможность искать пространства объектов - что-то вроде:

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

который немного шаткий, но полезно. С большим контекстом, может быть, есть лучший подход?

0

Возможно, я неправильно понял ваш вопрос. Я никогда не использовал метод subclasses_of в Rails 2. В Rails 3 я просто использовал Foo.descendants, который предоставляет массив классов (и их атрибутов), которые наследуют от Foo. Очень удобно.

+0

Подклассы амортизируются в Rails 3. Вместо этого используйте потомков. –

+0

Спасибо! Я обновил свой ответ. –

2

Если вы хотите, чтобы получить все подклассы SomeClass, то вы делаете:

SomeClass.descendants 

Аналогично, если вы хотите, чтобы выяснить, родительские классы, использование:

SomeClass.ancestors 

Это пройдет вы возвращаете массив для вашего потребления. Таким образом, вы можете:

SomeClass.descendants.each { |klass| } 
+1

Правописание => "потомки" – genkilabs

Смежные вопросы