问题
I'm using this Rails Guide to create a scope in order to create an "/admin" prefix for some controllers.
So I have a controller named Pages, I want to access it via "/admin/pages".
scope "/admin" do
resources :pages
end
That works great, but it is still accessible via "/pages" ... How do I prevent that? (I'm using Rails 3)
Here's my routes file:
devise_for :users
scope "/admin" do
resources :pages
resources :contents
end
root :to => "index#index"
match ':controller(/:action(/:id(.:format)))'
回答1:
Your syntax for the namespace is correct, but you need to remove the catch-all match from the last line because, according to the default routes.rb file,
# 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.
If the requested URL does not match the namespace you have declared, it will still match against the catch-all route at the end.
回答2:
Try this should work
namespace :admin do
resources :pages
end
http://edgeguides.rubyonrails.org/routing.html
回答3:
Try this:
scope "/admin", as: :admin do
resources :pages
end
来源:https://stackoverflow.com/questions/4581887/rails-3-routing-how-to-use-scope-to-create-admin-prefix