2013-06-12 3 views
0

내가 그 다음이명명 중첩 된 자원 (컨트롤러)

namespace :somearea do 
    resources :users do 
    resources :posts do 
    resources :comments 
    end 
    end 

과 같을 것이다 내가 그들을 어떻게 이름을 않는 컨트롤러를 가지고있는 경우? 그것은 확인을 다음과 같이 그들을 이름을 지정하는 것입니다 :

class SomeArea::BaseController < ApplicationController 

end 

class SomeArea::UsersController < SomeArea::BaseController 

end 

class SomeArea::Users::PostsController < SomeArea::BaseController 

end 

class SomeArea::Users::Posts::CommentsController < SomeArea::BaseController 

end 

이 내 프로젝트에서 정확한 계층 아니지만, 그럼에도 불구하고 나는 내 경우에는 컨트롤러의 이름을하는 방법을 이해할 수 있어야합니다.

+0

네임 스페이스가 분명하다. – apneadiving

답변

2

이 경우 중첩 된 경로는 실제로 경로 설정 방법에만 적용됩니다. 여기에서 컨트롤러를 모듈에서 중첩시킬 필요는 없습니다. 사실, 그렇게한다면 중첩 된 컨트롤러를 찾을 수 있도록 경로를 변경해야 할 수도 있습니다. 나는 다음 당신이 원하는 말을 :

class SomeArea::BaseController < ApplicationController 
end 

class SomeArea::UsersController < SomeArea::BaseController 
end 

class SomeArea::PostsController < SomeArea::BaseController 
end 

class SomeArea::CommentsController < SomeArea::BaseController 
end 

편집을 - 가능하면 피해야이 깊게 고려 나쁜 연습, 또는 적어도 뭔가를 중첩 된 경로를 가진, zeantsoi의 대답에 말했듯이. 그러나 어떤 이유로 든이 작업을 수행해야하는 경우에도 모듈 내의 모든 클래스를 코드에 중첩하지 않아야한다고 말합니다. 그것은 훨씬 더 번거로운 일이 될 것입니다.

0

나열된 예제는 실제로 입니다. 구문 상 허용되는이지만 깊이 중첩 된 경로를 만드는 것은 좋지 않습니다. canonical Rails guide on routing에서 :

깊이 중첩 자원을 신속하게 복잡하게 ... 자원 깊은 1 개 이상의 수준을 중첩해서는 안됩니다.

가이드는 Nesting Rails 경로와 관련하여 this article by Jamis Buck 참조로갑니다. 당신이 묘사 한 것처럼 진정으로 당신의 노선을 중첩 시키려고한다면, 그렇게 함의 의미를 이해할만한 가치가 있습니다.

0

는 다음과 같은 작업을 수행 할 수 있습니다

class SomeAreaController < ApplicationController 
end 

class UsersController < ApplicationControllerr 
end 

class PostsController < ApplicationController 
end 

class CommentsController < ApplicationController 
end 

당신이 제안하는 방식은 디렉토리 구조를 의미하기 때문에 그것은 중첩 된 자원을 추론하지 않습니다. 예 : SomeArea::Users::PostsControllerposts_controller.rbapp/controllers/some_area/users/ 폴더에 있음을 의미합니다.

사용자/게시물/댓글이 SomeArea::BaseController에서 상속된다는 사실은 사용자에게 달려 있지만 다시 말해 중첩 된 리소스를 고려하고 있다는 사실에 기인 한 것은 아닙니다.