2

我正在尝试编写一个方法来告诉我每个包含特定模块的类。看起来像这样 -

def Rating.rateable_objects
  rateable_objects = []
  ObjectSpace.each_object(Class) do |c|
    next unless c.include? Rateable
    rateable_objects << c
  end
  rateable_objects
end

其中“Rateable”是我包含在多个模型中的模块。

我发现如果我在启动 rails 控制台或运行服务器后立即调用此方法,则会返回 []。但是,如果我首先实例化其中一个使用模型的实例,它将在结果中返回该模型。

那么什么时候包含模块呢?我猜这个过程比他的应用程序启动时晚。如果我不能在这个过程的早期以这种方式获得这些信息,有没有办法做到这一点?

4

1 回答 1

4

在定义类时执行 include 语句时会包含它们。当你第一次使用它们时,Rails 会自动加载模块/类。此外,您可以尝试这样的事情:

module Rateable
  @rateable_object = []
  def self.included(klass)
    @rateable_objects << klass
  end
  def rateable_objects
    @rateable_objects
  end
end

这将构建列表,因为类包含模块。

于 2010-08-20T06:12:39.473 回答