2010-08-20 48 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

相關問題