Ruby on rails Rails引擎和名称空间。需要名称空间的情况?

Ruby on rails Rails引擎和名称空间。需要名称空间的情况?,ruby-on-rails,ruby-on-rails-3,rails-engines,Ruby On Rails,Ruby On Rails 3,Rails Engines,我对引擎中的名称空间有点困惑。在Rails引擎中,使用了隔离\u名称空间 module Blog class Engine < Rails::Engine isolate_namespace Blorgh end end 因为所有的东西都是有名称空间的(模型、表名等等),但它看起来像是有很多注释。为什么在关联键中不使用名称空间,并且在主机应用程序中存在注释资源的情况下,rails如何知道我指的是哪个注释?当您在某个模块内时,您可以引用模块的其他成员,而无需给出模块名称,例

我对引擎中的名称空间有点困惑。在Rails引擎中,使用了
隔离\u名称空间

module Blog
  class Engine < Rails::Engine
    isolate_namespace Blorgh
  end
end

因为所有的东西都是有名称空间的(模型、表名等等),但它看起来像是有很多注释。为什么在关联键中不使用名称空间,并且在主机应用程序中存在
注释
资源的情况下,rails如何知道我指的是哪个
注释

当您在某个模块内时,您可以引用模块的其他成员,而无需给出模块名称,例如:

module Foo

  class Bar
    def initialize
      @baz = Baz.new # same as Foo::Baz.new
    end
  end
  class Baz

  end
end
如果当前模块中不存在
Baz
,它将向下级联以查找定义,最终调用
const_missing
(在Rails中自动加载类就是基于它构建的),如果找不到,则抛出一个错误

你剩下的问题已经回答了

module Foo

  class Bar
    def initialize
      @baz = Baz.new # same as Foo::Baz.new
    end
  end
  class Baz

  end
end