Есть ли замена Rails 3 для subclasses_of? - PullRequest
3 голосов
/ 04 ноября 2010

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

Class.subclasses_of SomeClass

Это потому, что activespport / lib / active_support / core_ext / object / extending.rb отсутствует в Rails 3.

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

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

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

SomeClass.descendants

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

SomeClass.ancestors

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

SomeClass.descendants.each { |klass| }
0 голосов
/ 13 июля 2011

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

0 голосов
/ 04 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...