2011-01-03 24 views
8

Tôi đang sử dụng this Rails Guide để tạo phạm vi để tạo tiền tố "/ admin" cho một số bộ điều khiển.Rails 3 Routing - Cách sử dụng phạm vi để tạo tiền tố admin

Vì vậy, tôi có một bộ điều khiển có tên Trang, tôi muốn truy cập nó thông qua "/ admin/pages".

scope "/admin" do 
    resources :pages 
end 

Điều đó thật tuyệt, nhưng vẫn có thể truy cập qua "/ trang" ... Làm cách nào để ngăn chặn điều đó? (Tôi đang sử dụng Rails 3)

Dưới đây là tuyến đường tập tin của tôi:

devise_for :users 

scope "/admin" do 

    resources :pages 

    resources :contents 

end 

root :to => "index#index" 

match ':controller(/:action(/:id(.:format)))' 

Trả lời

7

cú pháp của bạn cho không gian tên là đúng, nhưng bạn cần phải loại bỏ các nhận tất cả trận đấu từ dòng cuối cùng bởi vì, theo tệp routes.rb mặc định,

# This is a legacy wild controller route that's not recommended for RESTful applications. 
# Note: This route will make all actions in every controller accessible via GET requests. 

Nếu URL được yêu cầu không khớp với không gian tên bạn đã tuyên bố, URL sẽ vẫn khớp với tuyến đường toàn bộ ở cuối.

+0

Cảm ơn câu trả lời nhanh. Vâng, tôi chắc chắn đã làm. Tôi là một rails newb vì vậy tôi có thể thiếu một cái gì đó đơn giản. Các tuyến đường hoạt động, nhưng các tuyến đường cũ vẫn hoạt động, đó là những gì tôi không muốn. – jyoseph

+1

Hmm ... Tôi vừa thử nó, vì vậy nó sẽ hoạt động đúng cách. Bạn đã khởi động lại máy chủ web chưa? Trong chế độ phát triển, bạn không cần phải khởi động lại, nhưng nó đáng để quay. Bạn có thể đăng tập tin routes.rb của bạn? –

+0

Cập nhật bài đăng với các tệp tuyến đường. Cảm ơn cho bàn tay! (Ngoài ra, tôi có các tuyến đường được khởi động lại và khởi động lại máy chủ) – jyoseph

3

Hãy thử điều này nên làm việc

namespace :admin do 

    resources :pages 

end 

http://edgeguides.rubyonrails.org/routing.html

+0

Điều này cũng sẽ hoạt động. Tuy nhiên, một không gian tên khác với phạm vi. Tên trợ giúp trong không gian tên quản trị sẽ được đặt trước bằng admin_. –

0

Hãy thử điều này:

scope "/admin", as: :admin do 
    resources :pages 
end 
Các vấn đề liên quan