2013-03-07 40 views
0

以下代碼旨在確定要執行的自己的哪個子類。它遍歷ObjectSpace中的所有內容以查找子類,然後從那裏執行正確的子類。在rails中,這不起作用,因爲庫文件夾中的類不在ObjectSpace中。什麼是通過特定文件夾搜索子類的方法?遍歷Rails的lib文件夾來查找子項

def execute 
    ObjectSpace.each_object(Class).select do |klass| 
    if (klass < self.class) 
     klass.designations.each do |designation| 
     if (designation.downcase.capitalize == @action.downcase.capitalize) 
      command = klass.new(@sumo_params) 
      command.execute 
     end 
     end 
    end 
    end 
end 

或者 - 您有推薦的解決方案嗎?

+0

你可以只需要lib中的每個文件來加載它們嗎?那麼,你的課程將會記憶中,你可以去探索這種瘋狂。 – 2013-03-07 21:06:54

回答

0

我把討巧現在(迭代通過一組字符串值):

def execute 
    @descendants.each do |descendant| 
    klass = descendant.downcase.capitalize.constantize 
    if (klass < self.class) 
     klass.designations.each do |designation| 
     if (designation.downcase.capitalize == @action.downcase.capitalize) 
      command = klass.new(@sumo_params) 
      command.execute 
     end 
     end 
    end 
    end 
end 
0

我會說爲此使用模塊。所以,這會使你的代碼類似如下:

的lib/base_methods.rb

module BaseMethods 

    def self.included(base) 
    @@classes_including ||= [] 
    @@classes_including << base 
    end 

    def do_whatever 
    @@classes_including.each do |class| 
     #.... 
    end 
    end 

end 

的lib/class_1.rb

class Class1 
    include BaseMethods 
end