2015-10-20 182 views
2

我使用Ruby on Rails的下面的類結構中的父類每個子類的方法:Ruby on Rails的 - 呼叫從

class Parent 
    def self.parse 
    self.subclasses.each(&:parse) # how to fix this? 
    end 
end 

class Child1 < Parent 
    def self.parse 
    # ... 
    end 
end 

class Child2 < Parent 
    def self.parse 
    # ... 
    end 
end 

我想這樣做:

Parent.parse 
=> Child1.parse and Child2.parse 

但實際上子類沒有加載,所以subclasses方法給出空數組。

有沒有簡單的方法來做這個非常普通的任務?

+2

你想acomplish什麼?父類不能訪問孩子的。也許你需要以另一種方式完成。請參閱http://stackoverflow.com/questions/11074175/how-to-return-new-instance-of-subclass-while-initializing-parent-class – tegon

回答

3

發生這種情況是因爲rails自動載入類:Parent在使用某處或需要之前不知道其子類。

剛從Parent類手動要求他們都:

# parent.rb 
require 'child1' 
require 'child2' 

class Parent 
    def self.parse 
    self.subclasses.each(&:parse) # how to fix this? 
    end 
end 
+2

絕對正確的是,它是導致問題的自動加載(你可以把這個如果你需要在'config/development.rb'中關閉),但我不確定要求它們的正確位置是父類。在application.rb或初始化程序中,或者在config/development.rb中,如果這是問題發生的唯一環境,是不是更好? – Shadwell

+1

@Shadwell,是的,你說得對,有可能是更好的地方。這就是我對班級可讀性的看法。我會把它放到'parent'類中,因爲它乍一看清楚這個類不依賴於rails自動加載功能。 – nsave