Ruby on Rails的 - 呼叫从

Ruby on Rails的 - 呼叫从

问题描述:

我使用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

发生这种情况是因为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