4

app/foo/bar.rbRailsでは、bar.rbに以下を含むモデルを作成できます。

class Foo::Bar
  def some_method
    puts "I work fine"
  end
end

純粋なrubyアプリでこれを実行しようとするとNameError: uninitialized constant Foo、モジュールを既に初期化していない限り、が表示されますFoo

最初に含まれているモジュールを初期化せずにクラスを作成できるようにするRailsは何をしていますか?activesupportのようなものを介してこの動作をインポートすることは可能ですか、それとも私たち自身で実装する必要がありますか?

4

2 に答える 2

3

Railsは、未定義のクラスが使用されたときに呼び出されるメソッドClassを含むようにクラスを変更します。const_missing次に、要求されたクラスをロードするために物をロードします。

ActiveSupportでのこれの実装はにありlib/active_support/dependencies.rbます。

于 2013-03-17T23:51:06.167 に答える
-1

実際に作成されたモデルクラスは<ActiveRecord::Baseに拡張されます

于 2013-03-17T23:13:53.117 に答える