Ruby on Rails - 从父类为每个子类调用一个方法

时间:2015-10-20 10:54:59

标签: ruby-on-rails ruby class ruby-on-rails-4 inheritance

我使用具有以下类结构的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方法给出了空数组。

有一种简单的方法可以完成这项非常常见的任务吗?

1 个答案:

答案 0 :(得分: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