2016-09-29 4 views
2

일정 자동로드에 LoadError 수 없습니다 그것은 그 오토로더

주소는 다음과 같은 오류

LoadError: Unable to autoload constant Address, expected /lib/tools/address.rb to define it

를 던졌습니다 lib 디렉토리/도구/주소와 나의 모델을로드하는 것

누군가가 내가 잘못 뭘하는지 말해 줄 수 . 나는
주소/상수 모델에 lib 디렉토리/도구/address.rb

응용 프로그램/모델/address.rb

class Address 
    blah 
end 

에 address.rb

도구 : 주소를 가리키는 것이라고 생각 LIB는 같은 이름을 가진하지만 서로 다른 네임 스페이스 여러 상수를 사용하는 것이 까다로울 수 있습니다 내 경험/도구/address.rb

module Tools 
    class Address 
    blah blah 
    end 
end 
+0

lib 디렉토리/도구/address.rb에서 누락 된 끝에 거기에 당신에게 LoadError을주고있다 파일의 상단에이 줄을 넣어. 그건 그냥 오타예요? – jaydel

+0

@jaydel yea, 그냥 오타입니다. – bopritchard

답변

5

합니다. 귀하의 경우 두 개의 Address 상수가 있습니다. 하나는 최상위 레벨에 있고 다른 하나는 Tools 네임 스페이스 안에 있습니다. 이로 인해 Rails 오토로더가 혼란 스러울 수 있습니다.

몇 가지 가능한 솔루션 :

당신이 최상위 Address (즉, 모델)을 사용하려면, 명시 적으로 ::Address를 사용을 참조하십시오.

그래도 작동하지 않으면 require_dependency을 사용하여 원하는로운 정보를 자동 로더에 제공 할 수 있습니다.

require_dependency("address") 

여기 문서입니다 :

require_dependency

Interprets a file using mechanism and marks its defined constants as autoloaded. file_name can be either a string or respond to to_path.

Use this method in code that absolutely needs a certain constant to be defined at that point. A typical use case is to make constant name resolution deterministic for constants with the same relative name in different namespaces whose evaluation would depend on load order otherwise.