0

我对引擎中的命名空间有点困惑。在使用哪里的 Rails 引擎中isolate_namespace

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

何时需要使用命名空间引用对象Blog(例如Blog::Postvs just Post)?

例如,在Post引擎资源的控制器中,可以这样做Post.find吗?什么时候绝对需要你使用Blog::Post

同样在模型关联中,假设 Post has_many :comments。不知何故,我期望将其定义如下:

class Post < ActiveRecord::Base
  :has_many "blog/comments"
end

因为一切都是命名空间(模型,表名,...),但它看起来has_many :comments只是工作。为什么在关联键中不使用命名空间,并且在Comment主机应用程序中存在资源的情况下,rails 如何知道Comment我指的是哪个?

4

1 回答 1

2

当您在某个模块中时,您可以在不提供模块名称的情况下引用该模块的其他成员,例如:

module Foo

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

  end
end

如果Baz当前模块中不存在,它将级联查找定义,最终调用const_missing(在此基础上构建 Rails 中的类的自动加载),如果没有找到则抛出错误。

您的其他问题在这里得到解答。

于 2012-08-30T12:23:51.223 回答