私の Rails 3.2 のモデル ディレクトリには、次の 2 つのクラスを含む "foo" フォルダーがあります。
# foo/bar.rb
class Foo::Bar; end
# foo/baz.rb
class Foo::Baz
def self.test
puts Bar.to_s
end
end
Bar と Baz は同じモジュールにあるため、Foo::Baz.test は Foo::Bar を単に Bar として参照することに注意してください。
次に、コンソールを開いて Foo::Baz.test を 2 回呼び出します。
1.9.3-p0 :001 > Foo::Baz.test
Foo::Bar
=> nil
1.9.3-p0 :002 > Foo::Baz.test
NameError: uninitialized constant Foo::Baz::Bar
from /../app/models/foo/baz.rb:2:in `test'
ご覧のとおり、呼び出しは最初は正常に機能し、その後は毎回クラッシュします。なんで?
これは、Foo::Baz が単に Bar ではなく完全修飾名 Foo::Bar を使用する場合には発生しません。