2010-08-20 47 views
2

我想写一个方法,告诉我包含特定模块的每个类。它看起来像这样 -模块何时包含在运行在rails中的Ruby类中?

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

其中“应课差饷租”是我的模块,我包括几种型号。

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

那么模块何时包含?我在后面的过程中猜测,比他的应用程序启动时。如果我在这个过程的早期无法获得这些信息,那么无论如何要完成这个任务?

+0

我会认为它会在包含模块的模型被调用时加载。 – 2010-08-20 01:49:51

回答

4

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

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

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

+0

不幸的是,“当你第一次使用模块/类时,Rails自动加载模块/类”意味着我可能无法得到我想要做的工作,但这并不能让答案不那么正确。谢谢。 – JoshReedSchramm 2010-08-22 23:52:06

+0

不应该是@@ rateable_object而不是@rateable_objects? – MhdSyrwan 2013-07-20 17:34:35

相关问题