2013-03-07 38 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