代码之家  ›  专栏  ›  技术社区  ›  JoshReedSchramm

Ruby类中的模块何时包含在Rails中?

  •  2
  • JoshReedSchramm  · 技术社区  · 15 年前

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

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

    其中“Ratable”是我的模块,我将它包括在几个模型中。

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

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   Nick Lewis    15 年前

    在定义类时执行include语句时,将包含这些语句。Rails在您第一次使用模块/类时自动加载它们。另外,您也可以尝试这样的方法:

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

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