[ruby-on-rails] Ruby-on-rails 3 라우팅의 범위와 네임 스페이스의 차이

ruby-on-rails 3의 라우팅에서 네임 스페이스와 범위의 차이점을 이해할 수 없습니다.

누군가 설명해 주시겠습니까?

namespace "admin" do
  resources :posts, :comments
end

scope :module => "admin" do
  resources :posts, :comments
end



답변

차이점은 생성 된 경로에 있습니다.

경로는 다음 admin_posts_pathadmin_comments_path그들은 단지 반면, 네임 스페이스에 대한 posts_pathcomments_path범위에 대해.

:name_prefix범위에 옵션을 전달하여 네임 스페이스와 동일한 결과를 얻을 수 있습니다 .


답변

예제는 항상 도움이되므로 여기에 예제가 있습니다.

namespace :blog do
  resources :contexts
end

다음 경로를 제공합니다.

    blog_contexts GET    /blog/contexts(.:format)          {:action=>"index", :controller=>"blog/contexts"}
                  POST   /blog/contexts(.:format)          {:action=>"create", :controller=>"blog/contexts"}
 new_blog_context GET    /blog/contexts/new(.:format)      {:action=>"new", :controller=>"blog/contexts"}
edit_blog_context GET    /blog/contexts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/contexts"}
     blog_context GET    /blog/contexts/:id(.:format)      {:action=>"show", :controller=>"blog/contexts"}
                  PUT    /blog/contexts/:id(.:format)      {:action=>"update", :controller=>"blog/contexts"}
                  DELETE /blog/contexts/:id(.:format)      {:action=>"destroy", :controller=>"blog/contexts"}

범위 사용 중 …

scope :module => 'blog' do
  resources :contexts
end

우리에게 줄 것입니다 :

     contexts GET    /contexts(.:format)           {:action=>"index", :controller=>"blog/contexts"}
              POST   /contexts(.:format)           {:action=>"create", :controller=>"blog/contexts"}
  new_context GET    /contexts/new(.:format)       {:action=>"new", :controller=>"blog/contexts"}
 edit_context GET    /contexts/:id/edit(.:format)  {:action=>"edit", :controller=>"blog/contexts"}
      context GET    /contexts/:id(.:format)       {:action=>"show", :controller=>"blog/contexts"}
              PUT    /contexts/:id(.:format)       {:action=>"update", :controller=>"blog/contexts"}
              DELETE /contexts/:id(.:format)       {:action=>"destroy", :controller=>"blog/contexts"}

다음은 주제에 대한 좋은 읽기입니다. http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing


답변

로부터 레일 가이드

“네임 스페이스 범위가 자동으로 추가됩니다 :as뿐만 아니라 :module:path접두사.”

그래서

namespace "admin" do
  resources :contexts
end

와 같다

scope "/admin", as: "admin", module: "admin" do
  resources :contexts
end


답변

범위네임 스페이스 모두 주어진 기본 옵션에 대한 경로 집합의 범위를 지정합니다.
거기에 대한 기본 옵션이없는 것을 제외 범위 등에 대한 네임 스페이스
:path , :as, :module, :shallow_path:shallow_prefix네임 스페이스의 이름 옵션 모든 기본.

범위네임 스페이스 모두에 대해 사용 가능한 옵션일치 항목에 해당합니다 .


답변

범위 는 약간 복잡하지만 원하는 작업을 정확하게 미세 조정할 수있는 더 많은 옵션을 제공합니다.

범위모듈, 경로 및 . 모든 it 옵션이있는 범위가 표시되면 네임 스페이스와 정확히 동일합니다.

즉, 생성 된 경로

namespace :admin do
  resources :posts
end

다음과 같다

scope module: 'admin', path: 'admin', as: 'admin' do
  resources :posts
end

즉, 네임 스페이스에 비해 범위에 대한 기본 옵션이 없다고 말할 수 있습니다 . 네임 스페이스 는 기본적으로 이러한 모든 옵션을 추가합니다. 따라서 범위를 사용하여 필요에 따라 경로를 더 미세 조정할 수 있습니다.

범위네임 스페이스 기본 동작을 자세히 살펴보면 기본적으로 범위: path 옵션 만 지원 한다는 것을 알 수 있습니다. 여기서 네임 스페이스 는 기본적 으로 세 가지 옵션 모듈, 경로를 지원합니다 .

자세한 내용은 doc namespace-and-routing을 참조하세요 .


답변