Issue with "new" routing when upgrading from rails 3.2.0 to 3.2.2

edit, new-operator, routes, ruby-on-rails, ruby-on-rails-3

Solution

I would guess that it is not the `/things/new` route itself that is causing the problem. There is something being rendered (one of your _nav menus, for example) that includes a call to `edit_app_thing_path` with a nil or otherwise missing object parameter.

Problem

I have some issues with routing when upgrading rails from 3.2.0 to 3.2.2. When generating a new route with the routes helper the helper works and generates a link that looks like: ``` /things/new ``` However when you visit the link it throws a routing error... ``` Routing Error No route matches {:action=>"edit", :controller=>"app/things", :id=>#<Thing id: nil, title: n.... ``` It mistakes it for an edit url actions not a new one. There is nothing in the routes but.... ``` scope :module => :app, :as => :app, :constraints => { :subdomain => /app/ } do resources :things end ``` Has anyone experienced this or know what's happening? Thanks. Extra details... Rake routes: ``` app_things GET /things(.:format) app/things#index {:subdomain=>/app/} POST /things(.:format) app/things#create {:subdomain=>/app/} new_app_thing GET /things/new(.:format) app/things#new {:subdomain=>/app/} edit_app_thing GET /things/:id/edit(.:format) app/things#edit {:subdomain=>/app/} app_thing GET /things/:id(.:format) app/things#show {:subdomain=>/app/} PUT /things/:id(.:format) app/things#update {:subdomain=>/app/} DELETE /things/:id(.:format) app/things#destroy {:subdomain=>/app/} ``` Curl: ``` curl -IL http://app.testapp.com/things/new HTTP/1.1 404 Not Found ``` From the log (stack trace?): ``` Started GET "/things/new" for 127.0.0.1 at 2012-04-24 19:27:02 +0100 Processing by App::ThingsController#new as HTML Rendered app/things/_new_form.html.erb (2.0ms) Rendered app/things/new.html.erb within layouts/app (2.7ms) Rendered layouts/_app_includes.html.erb (11.0ms) Rendered app/nav/_things_new.html.erb (1.6ms) Rendered app/nav/_menu_wrapper.html.erb (2.1ms) Completed 500 Internal Server Error in 21ms ActionController::RoutingError (No route matches {:action=>"edit", :controller=>"app/things", :id=>#<Thing id: nil, title: nil, created_at: nil, updated_at: nil, account_id: nil>}): app/views/app/nav/_step_1_title.html.erb:2:in `_app_views_app_nav__step___title_html_erb__3644446743043796555_70280275307960' app/views/app/nav/_things_new.html.erb:1:in `_app_views_app_nav__things_new_html_erb__4471631226426153422_70280275315660' app/views/app/nav/_menu_wrapper.html.erb:8:in `_app_views_app_nav__menu_wrapper_html_erb___3003322303253991863_70280275346820' app/views/layouts/app.html.erb:32:in `_app_views_layouts_app_html_erb__4514085623626236526_70280285513740' Rendered /Users/blerg/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.6ms) ```

Original source