Jeśli mam 4 klas z następującą hierarchią:Jak mogę uzyskać listę wszystkich podklas bez instancji pierwszy w Ruby
class MainClass < ActiveRecord::Base
...
end
class SubClassA < MainClass
...
end
class SubClassB < MainClass
...
end
class SubClassC < MainClass
...
end
Jak mogę uzyskać listę podklas MainClass bez przechodzenia przez i tworzenia wystąpienia każdej z pozostałych klas?
w świeżej IRB sesji mogę iść i powiedzieć
irb(main)> MainClass.descendants
=> []
Jednak gdybym przejść i tworzenia wystąpień każdej podklasy Zobaczę następujące
irb(main)> SubClassA.new
=> #<SubClassA ...>
irb(main)> SubClassB.new
=> #<SubClassB ...>
irb(main)> SubClassC.new
=> #<SubClassC ...>
irb(main)> MainClass.descendants
=> [SubClassA(...), SubClassB(...), SubClassC(...)]
jestem w zasadzie poszukując sposobu na programowe dostarczanie wszystkich podklas, więc w przyszłości, gdy chcę dodać SubClassD, SubClassE itp., nie będę musiał się martwić, że każdy jest tworzony w kodzie, zanim użytkownik będzie mógł je zobaczyć.
Próbowałem na konsoli szynowej (szyny 4.1.2). Otrzymuję to (i nie taką pustą listę jak ty): - irb (główne): 012: 0> MainClass.descendants => [SubClassA (tabela nie istnieje), SubClassB (tabela nie istnieje)] – rohan
Interesujące. Pierwotnie podzieliłem moje podklasy na własne pliki (sub_class_a.rb, sub_class_b.rb, sub_class_c.rb) na tym samym poziomie i otrzymałem to, co opisałem powyżej. Kiedy skonsolidowałem wszystkie klasy w tej samej klasie głównej, metoda potomków działała tak, jak powiedziałeś. – user1535152