在我的 Rails 3.2 模型目录中,我有一个文件夹“foo”,其中包含两个类:
# foo/bar.rb
class Foo::Bar; end
# foo/baz.rb
class Foo::Baz
def self.test
puts Bar.to_s
end
end
请注意 Foo::Baz.test 将 Foo::Bar 引用为简单的 Bar,因为 Bar 和 Baz 在同一个模块中。
然后我打开控制台并调用 Foo::Baz.test 两次:
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 使用完全限定名称 Foo::Bar 而不是 Bar,则不会发生这种情况。