2012-08-30 3 views
0

나는 약간의 엔진에서 네임 스페이스 (namespacing)와 혼동한다. 사용 isolate_namespace 레일 엔진에서레일 엔진과 네임 스페이스. 네임 스페이스가 필요한 경우?

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

때 당신이 네임 스페이스 Blog (단지 Post 대 예를 들어, Blog::Post)와 객체를 참조하는 것이 필요합니까?

예를 들어, 엔진의 Post 리소스 컨트롤러의 경우, 그냥 Post.find을 실행해도됩니까? Blog::Post을 꼭 사용해야하는 경우?

또한 모델 연관에서 Post has_many :comments이라고 가정합니다. 어떻게 든, 나는 다음과 같이 정의 할 수 기다리고 있었다 : has_many :comments 그냥 작동처럼 모든 것이 네임 스페이스입니다

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

때문에 (모델, 테이블 이름, ...)하지만 보인다. 네임 스페이스가 연관 키에 사용되지 않는 이유와 호스트 응용 프로그램에 Comment 리소스가있는 경우 레일을 참조 할 때 Comment을 어떻게 알 수 있습니까? 일부 모듈 내부가되면

답변

2

, 당신은 모듈 이름을 지정하지 않고 모듈의 다른 멤버를 참조 할 수 있습니다, 예를 들면 : Baz은 현재 모듈에 존재하지 않는 경우

module Foo 

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

    end 
end 

, 그것은 계단식합니다 아래로 정의를 찾아 결국 const_missing (레일즈에 클래스의 자동로드가 빌드 됨)을 호출 한 다음, 아무것도 발견되지 않으면 오류를 던집니다.

기타 문의 사항은 here입니다.

+0

명확하고 간결합니다. +1 –

관련 문제