Namespace routing error

I'm not sure if I'm doing something wrong or there is a problem with namespaces and routes in 3.0.0.beta version. After creating new application I've generated new controller with

script/rails generate controller Admin::Dashboard show

and added:

namespace :admin do   resource :dashboard end

to routes.rb, but http://localhost:3000/admin/dashboard resulted in routing error: No route matches "/admin/dashboard". Maybe I'm wrong but it looks like problem is in mapper.rb line 391:

def controller   options[:controller] || plural end

where pluralized version of controller is returned so even:

rake routes

returns correct list of routes (in singular form) final target has pluralized version (admin/dashboards) and routing error occurs. Now I'm wondering whether I've wrongly defined route or controller method should be:

def controller   options[:controller] || singular end

resource :session do     get :jumpin, :as => 'session'     post :forgot_password, :as => 'session'   end

I think I have seen this issue. In my code I have had to use the :as option to get the generated helper methods to work. Without the :as option I can still hit the actions, but it is just the _url|path helpers that are not working. I'm swamped and have not made a ticket yet.

- Ken

Rails expects the controller name to be pluralized even when using singular resources. The rails3 beta is wrongly reporting Routing Errors when anything goes wrong with the controller. See #3862 cryptic "Routing Error" when ApplicationController has a bug - Ruby on Rails - rails.

If you are right that Rails expect the controller name to be pluralized then 'rake routes' give wrong result. Because with route:

namespace :admin do   resource :dashboard end

routes are:

                    GET /admin/dashboard(.:format) {:controller=>"admin/dashboards", :action=>"show"}                      POST /admin/dashboard(.:format) {:controller=>"admin/dashboards", :action=>"create"}                      PUT /admin/dashboard(.:format) {:controller=>"admin/dashboards", :action=>"update"}      admin_dashboard DELETE /admin/dashboard(.:format) {:controller=>"admin/dashboards", :action=>"destroy"} new_admin_dashboard GET /admin/dashboard/new(.:format) {:controller=>"admin/dashboards", :action=>"new"} edit_admin_dashboard GET /admin/dashboard/edit(.:format) {:controller=>"admin/dashboards", :action=>"edit"}

so path is in singular form and controller is expected to be in plural. On the other hand with:

namespace :admin do   resources :dashboard end

both paths and controller are in plural:

                     GET /admin/dashboards(.:format) {:controller=>"admin/dashboards", :action=>"index"}     admin_dashboards POST /admin/dashboards(.:format) {:controller=>"admin/dashboards", :action=>"create"} new_admin_dashboard GET /admin/dashboards/new(.:format) {:controller=>"admin/dashboards", :action=>"new"}                      GET /admin/dashboards/:id(.:format) {:controller=>"admin/dashboards", :action=>"show"}                      PUT /admin/dashboards/:id(.:format) {:controller=>"admin/dashboards", :action=>"update"}      admin_dashboard DELETE /admin/dashboards/:id(.:format) {:controller=>"admin/dashboards", :action=>"destroy"} edit_admin_dashboard GET /admin/dashboards/:id/edit(.:format) {:controller=>"admin/dashboards", :action=>"edit"}

I guess I'm missing something but I still cannot figure out what :frowning: