2014-03-14 4 views
1

ActiveRecord가 아닌 모델을 정의하는 Rails 3 앱이 있습니다. 이 모든 것은 app/models/module_name에 정의되어 있습니다. 나는 all_autoload_paths에서 다음을 가지고 있습니다 :비 ActiveRecord 모델의 레일로드

[4] pry(main)> app._all_autoload_paths 
=> ["/Users/mandar/myapp/lib", 
"/Users/mandar/myapp/app/assets", 
"/Users/mandar/myapp/app/controllers", 
"/Users/mandar/myapp/app/helpers", 
"/Users/mandar/myapp/app/models"] 

모델을로드 할 때 다음 두 클래스 정의를 처리하는 방법에는 차이가 있습니까?

class A::Y 
    # some code 
end 

나는이 물어 그 이유

module A 
    class X 
     # some code 
    end 
end 

내가 uninitialized constant A::Y - NameError 오류를 본 적이 가끔있다.

업데이트 : Sibevin의 대답에 이어이 부분을보다 명확하게 말하고 싶습니다. 현재, 나는 다음과 같은 파일 구조를 가지고 :

내가 그러나 거의 결코 X 용

감사합니다 도움 들어, ModuleName::ClassName 구문을 사용 Y에 대한 오류를 보았다

app 
    - models 
    - a 
     - x.rb 
     - y.rb 

!

답변

1

그들은 차이가 없어야하지만 대개 개별 파일로 구분합니다.

먼저 app/models/a/ 폴더를 만들고 class A::Xapp/models/a/x.rb에 넣을 수 있습니다.

마찬가지로, class A::Y에 대해서는 app/models/a/y.rb입니다.

BTW, app/models/a.rb (module A)

UPDATE :

사실, 모듈에서 클래스를 선언 2 포맷을 사용하지 않습니다. 아마 다음 문서가 귀하의 질문에 대답 할 수있는 : 당신이 이제까지 모듈을 다시 여는 짧은 컷을 시도한 경우

Everything you ever wanted to know about constant lookup in Ruby

을, 당신 은 생략 네임 스페이스의 상수는 때로 믿을 것을 눈치 챘을 수도 ' '사용할 수 있습니다. 이는 외부 네임 스페이스가 Module.nesting에 추가되지 않았기 때문입니다.

+0

내가 현재 가지고있는 파일 구조입니다. 정확하지 않은 것에 대해 유감입니다. 그에 따라 질문을 업데이트하겠습니다. –

관련 문제