2014-01-28 6 views
0

내가 모듈어떻게 네임 스페이스

#lib/app/models/foo.rb 
module App::Models 
    class Foo 
    def bar 
     true 
    end 
    end 
end 

를 내부 클래스를 쓰고 있어요에 루비 클래스를 필요로하고 내가

#spec/lib/app/models/foo_spec.rb 
require_relative '../../../../lib/app/models/foo' 

describe App::Models::Foo do 
end 

내가 추적 오류가 그것에 대한 사양을 실행하려고 할 때 :

rspec spec/lib/app/models/foo_spec.rb 
/Users/frojas/git/tmp/lib/app/models/foo.rb:1:in `<top (required)>': uninitialized constant App (NameError) 
    from /Users/frojas/git/tmp/spec/lib/app/models/foo_spec.rb:1:in `require_relative' 

내가 잘못하고 싶다는 것을 이해하지 못합니다.

+0

? 먼저 그것을 정의 할 필요가 있습니다. 그러면'module App :: Models'이 올 것입니다 .. –

답변

1

당신은 그것을 사용하기 전에 모듈을 정의 할이 :

module App 
    module Models 
    class Foo 
     def bar 
     true 
     end 
    end 
    end 
end 

이 방법은 다음 App 모듈의 Models 모듈 후 제대로 Foo 클래스를 정의하고 있습니다.

+0

고마워요! 내가 사용하고있는 네임 스페이스가 아니라, 내가 생각해 낸 첫 번째 예일뿐입니다. –

1

module App::ModelsApp 모듈 안에 Models 모듈을 정의한다는 것을 의미합니다. 그러나 이것을하기 전에 모듈 App을 정의해야합니다. 당신이 그렇게하지 않았으므로 오류 초기화되지 않은 상수 App (NameError) 그것은 거품을 일으킨다.

먼저

module App 
    # your code 
end 

다음

module App::Models 
    class Foo 
    def bar 
     true 
    end 
    end 
end 

또는 다음과 같이 수행

module App 
    module Models 
    class Foo 
     def bar 
     true 
     end 
    end 
    end 
end 
당신이`App`을 정의 않았다