2012-08-30 42 views
0

我對引擎中的命名空間有些困惑。在Rails引擎,其中isolate_namespace時,Rails引擎和命名空間。需要命名空間的情況?

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

時需要它,你指的對象命名空間Blog(例如Blog::Post VS只是Post)?

例如,在發動機的Post資源的控制器內,可以做Post.find嗎?如果您絕對需要使用Blog::Post

同樣在模特協會,假設郵政has_many :comments。不知怎的,我期待如下定義它:

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

,因爲一切都在命名空間(模型,表名,...),但它看起來像has_many :comments只是工作。爲什麼命名空間不用於關聯關鍵字,並且在主機應用程序中存在資源的情況下,軌道如何知道我指的是哪個Comment

回答

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

+0

清晰簡潔。 +1 –