2011-06-22 5 views
8

私が取り組んでいるRailsアプリケーションでは、単一テーブル継承モデル "ノード"に関連するモデル "タイプ"があります。ノードの可能なサブクラスは、タイプテーブルのタイプとして定義されています。動的なクラスローディング: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

関連する問題