2011-06-22 44 views
8

在我正在處理的Rails應用程序中,我有一個與單表繼承模型「Node」相關的模型「Type」:任何可能的Node子類都被定義爲類型表中的Type。動態類加載:Ruby中的類是否有「method_missing」?

現在,這可以加載初始化程序中的所有類,但我只想在需要時才加載子類。

我能想到的最佳解決方案是對未初始化的常量進行回退,以檢查該常量是否可以代表應用程序中的類,類似於method_missing所做的一樣。

我想就如何以及在哪裏定義這個邏輯或者是否有更好的解決方案提供一些建議。

回答

10

Module#const_missing

http://apidock.com/ruby/Module/const_missing

我認爲你可以(AB)使用您的需求。

+0

ops!我幾秒鐘後發佈了相同的答案:P –

+0

我認爲你說(ab)使用,因爲它遠離最佳實踐? :)萬一,任何建議都超過歡迎和讚賞。無論如何,正是我所期待的,非常感謝! – amencarini

+2

呵呵,我沒有這麼說,它在所有的元編程中更多地刺穿了使用和濫用很多時間的元編程。往往不是我是那個有罪的黨... ;-) –

-1

也許你可以rescue一個未定義的常量錯誤和加載/創建你的類。

14

我不知道這是不是新的,但我認爲這是值得加入。作爲類方法可以使用丟失的方法

class Example 
    def method_missing(method_name, *arguments, &block) 
    puts 'needs this instance method' 
    end 

    def self.method_missing(method_name, *arguments, &block) 
    puts 'needs this class method' 
    end 
end 
+1

經過測試,這似乎是正確的答案。 – nurettin