2010-06-12 25 views

Trả lời

95

Sự khác biệt nằm trong đường dẫn được tạo.

Đường dẫn là admin_posts_pathadmin_comments_path cho không gian tên, trong khi chúng chỉ là posts_pathcomments_path cho phạm vi.

Bạn có thể nhận được kết quả tương tự như một namespace bằng cách thông qua các tùy chọn :name_prefix đến phạm vi.

+1

bởi đường dẫn u có nghĩa là tên người trợ giúp phải không? tôi không hiểu chức năng của phạm vi. những gì hiện nó (: module => "admin") làm gì nếu không có gì thay đổi? –

+2

Nó thay đổi đường dẫn thực tế được sử dụng bởi các đường dẫn đến "/ admin/anything", giống như không gian tên. Sự khác biệt duy nhất là tiền tố được thêm vào các phương thức trợ giúp. – alternative

+28

Để hiểu rõ hơn sự khác biệt: hãy xem xét sử dụng phạm vi cho bản địa hóa thông qua URL và không gian tên để lồng nhau, ví dụ: url: http: //domain.com/nl/admin/panel. Các nl là một phạm vi, và admin là một không gian tên. – Valentin

62

ví dụ luôn giúp tôi, vì vậy đây là một ví dụ:

namespace :blog do 
    resources :contexts 
end 

sẽ cho chúng ta các tuyến đường sau:

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"} 

sử dụng phạm vi ...

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

Sẽ cung cấp chúng tôi:

 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"} 

Dưới đây là một số đọc tốt về đề tài này: "Phạm vi không gian tên sẽ tự động thêm :as cũng như :module:path tiền tố" http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing

+1

Vì vậy, nếu bạn không sử dụng phạm vi ở đây và chỉ có: tài nguyên: ngữ cảnh, bộ điều khiển sẽ không được lồng vào blog: blog/ngữ cảnh – berto77

49

từ rails guide

nên

namespace "admin" do 
    resources :contexts 
end 

cũng giống như

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

Cả phạm vinamespace được xác định phạm vi một tập hợp các tuyến đường đến các tùy chọn mặc định cho trước.
Trừ rằng không có tùy chọn mặc định cho phạm vi, và cho namespace :path, :as, :module, :shallow_path:shallow_prefix lựa chọn tất cả các mặc định để tên của namespace.

Available options cho cả phạm vinamespace tương ứng với những trận đấu.

Các vấn đề liên quan