我对引擎中的命名空间有点困惑。在使用isolate_namespace
的Rails引擎中,
module Blog
class Engine < Rails::Engine
isolate_namespace Blorgh
end
end
何时需要您引用 >>对象<{1}}(例如Blog
与仅Blog::Post
)?
例如,在引擎Post
资源的控制器内,是否可以Post
?如果您绝对需要使用Post.find
?
同样在模型关联中,假设发布Blog::Post
。不知何故,我希望将其定义如下:
has_many :comments
因为所有内容都是命名空间(模型,表名,......),但它看起来像class Post < ActiveRecord::Base
:has_many "blog/comments"
end
才有效。为什么命名空间不用于关联键,并且在主机应用程序中存在has_many :comments
资源的情况下,rails如何知道我指的是哪个Comment
?
答案 0 :(得分: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上构建自动加载的类),然后抛出一个如果找不到任何错误。
其余的问题已经回答here。