Rails No route matches {:controller=>"devise/products"}

devise, model-view-controller, partials, routes, ruby-on-rails

Solution

Look more closely at your stack trace:

Started GET "/users/sign_up" for 127.0.0.1 at 2012-12-02 18:47:23 -0500
Processing by Devise::RegistrationsController#new as HTML
  Rendered /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/shared/_links.erb (0.3ms)
  Rendered /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/registrations/new.html.erb within layouts/application (2.3ms)
  Rendered products/_search.html.erb (0.3ms)
  Product Load (0.1ms)  SELECT DISTINCT product_type FROM "products" 
  Rendered products/_product_typeDistinctList.html (0.5ms)
  Rendered cart/_cart.html.erb (0.7ms)
Completed 500 Internal Server Error in 14ms

ActionController::RoutingError (No route matches {:controller=>"devise/products"}):
  app/views/cart/_cart.html.erb:49:in `_app_views_cart__cart_html_erb___3785130162884562793_21827300'
  app/views/layouts/application.html.erb:59:in `_app_views_layouts_application_html_erb___2170720560050181211_22251920'


  Rendered /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.5ms)

Found it? The log shows it has rendered a bunch of partials, down to `cart/_cart.html.erb`. It even tells you the error happens on line 49. Now what's on line 49? This:

<%= link_to 'Keep Shopping', :controller => :products %>
<%= link_to 'Empty Cart', :controller => "cart", :action => "clearCart" %>
<%= link_to 'Proceed to Check Out', :controller => "cart", :action => "createOrder" %>

As Ryan rightly points out in the following comment, Rails is looking for a partial scoped under `Devise` since this is the one under which you're rendering.

More simply, you can just feed it the route name (the one you'll find in `rake routes`) to which you add `_path` for a helper to form a URL. `products_path` ends up being the URL string for `products#index`.

Which gives in your case

<%= link_to 'Keep Shopping', products_path %>
<%= link_to 'Empty Cart', clearCart_path %>
<%= link_to 'Proceed to Check Out', checkout_path %>

Listen to your stack traces, they're talking to you!

Problem

I get the below error on my rails application when I try to login or register (I'm using the Devise GEM for logins). ``` Routing Error No route matches {:controller=>"devise/products"} ``` All the source code for the application can be found here: https://github.com/rossmc/topsnowboards I've tried changing the `link_to` in application.html.erb & product/index.html.erb from: ``` <%= link_to 'sign in', new_user_session_path %> ``` to: ``` <%= link_to 'sign in', :controller => "/products", new_user_session_path %>. ``` But this just throw up more errors. Interestingly the login features & routes were working fine before I added a partial for the shopping cart, which I placed in the application.html.erb on my last commit. When I remove this partial the routing error disappears but I loose my partial views/cart/_cart.html.erb. Below is the console dump from when I try to login & run the rake routes command. Thanks in advance for taking the time to look at this. Console Dump ``` Connecting to database specified by database.yml DEPRECATION WARNING: Passing a block to devise_for is deprecated. Please remove the block from devise_for (only the block, the call to devise_for must still exist) and call devise_scope :user do ... end with the block instead. (called from block in <top (required)> at C:/Users/Ross/Documents/NCI-HDip/Server Side/PROJ - Server Side/site/config/routes.rb:16) Started GET "/users/sign_up" for 127.0.0.1 at 2012-12-02 22:15:33 +0000 Processing by Devise::RegistrationsController#new as HTML Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/shared/_links.erb (2.0ms) Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/registrations/new.html.erb within layouts/application (106.0ms) [1m[36mProduct Load (0.0ms)[0m [1mSELECT DISTINCT product_type FROM "products" [0m Rendered products/_product_typeDistinctList.html (54.0ms) Rendered cart/_cart.html.erb (91.0ms) Completed 500 Internal Server Error in 834ms ActionController::RoutingError (No route matches {:controller=>"devise/products"}): app/views/cart/_cart.html.erb:49:in `_app_views_cart__cart_html_erb__355880610_32436408' app/views/layouts/application.html.erb:53:in `_app_views_layouts_application_html_erb__478801204_33653088' Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms) Started GET "/cart/3" for 127.0.0.1 at 2012-12-02 22:15:39 +0000 Processing by CartController#add as HTML Parameters: {"id"=>"3"} Completed 401 Unauthorized in 1ms Started GET "/users/sign_in" for 127.0.0.1 at 2012-12-02 22:15:39 +0000 Processing by Devise::SessionsController#new as HTML Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/shared/_links.erb (1.0ms) Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/sessions/new.html.erb within layouts/application (11.0ms) [1m[35mProduct Load (0.0ms)[0m SELECT DISTINCT product_type FROM "products" Rendered products/_product_typeDistinctList.html (1.0ms) Rendered cart/_cart.html.erb (4.0ms) Completed 500 Internal Server Error in 54ms ActionController::RoutingError (No route matches {:controller=>"devise/products"}): app/views/cart/_cart.html.erb:49:in `_app_views_cart__cart_html_erb__355880610_32436408' app/views/layouts/application.html.erb:53:in `_app_views_layouts_application_html_erb__478801204_33653088' Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms) Started GET "/users/sign_in" for 127.0.0.1 at 2012-12-02 22:15:43 +0000 Processing by Devise::SessionsController#new as HTML Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/shared/_links.erb (1.0ms) Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/devise-2.1.2/app/views/devise/sessions/new.html.erb within layouts/application (9.0ms) [1m[36mProduct Load (0.0ms)[0m [1mSELECT DISTINCT product_type FROM "products" [0m Rendered products/_product_typeDistinctList.html (1.0ms) Rendered cart/_cart.html.erb (4.0ms) Completed 500 Internal Server Error in 51ms ActionController::RoutingError (No route matches {:controller=>"devise/products"}): app/views/cart/_cart.html.erb:49:in `_app_views_cart__cart_html_erb__355880610_32436408' app/views/layouts/application.html.erb:53:in `_app_views_layouts_application_html_erb__478801204_33653088' Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.0ms) ``` rake routes ``` C:\Users\Ross\Documents\NCI-HDip\Server Side\PROJ - Server Side\site>rake routes profiles GET /profiles(.:format) profiles#index POST /profiles(.:format) profiles#create new_profile GET /profiles/new(.:format) profiles#new edit_profile GET /profiles/:id/edit(.:format) profiles#edit profile GET /profiles/:id(.:format) profiles#show PUT /profiles/:id(.:format) profiles#update DELETE /profiles/:id(.:format) profiles#destroy lineitems_index GET /lineitems/index(.:format) lineitems#index lineitems_show GET /lineitems/show(.:format) lineitems#show lineitems_new GET /lineitems/new(.:format) lineitems#new lineitems_edit GET /lineitems/edit(.:format) lineitems#edit order_lineitems GET /orders/:order_id/lineitems(.:format) lineitems#index POST /orders/:order_id/lineitems(.:format) lineitems#create new_order_lineitem GET /orders/:order_id/lineitems/new(.:format) lineitems#new edit_order_lineitem GET /orders/:order_id/lineitems/:id/edit(.:format) lineitems#edit order_lineitem GET /orders/:order_id/lineitems/:id(.:format) lineitems#show PUT /orders/:order_id/lineitems/:id(.:format) lineitems#update DELETE /orders/:order_id/lineitems/:id(.:format) lineitems#destroy orders GET /orders(.:format) orders#index POST /orders(.:format) orders#create new_order GET /orders/new(.:format) orders#new edit_order GET /orders/:id/edit(.:format) orders#edit order GET /orders/:id(.:format) orders#show PUT /orders/:id(.:format) orders#update DELETE /orders/:id(.:format) orders#destroy GET /orders(.:format) orders#index POST /orders(.:format) orders#create GET /orders/new(.:format) orders#new GET /orders/:id/edit(.:format) orders#edit GET /orders/:id(.:format) orders#show PUT /orders/:id(.:format) orders#update DELETE /orders/:id(.:format) orders#destroy new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy user_password POST /users/password(.:format) devise/passwords#create new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit PUT /users/password(.:format) devise/passwords#update cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel user_registration POST /users(.:format) devise/registrations#create new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy products GET /products(.:format) products#index POST /products(.:format) products#create new_product GET /products/new(.:format) products#new edit_product GET /products/:id/edit(.:format) products#edit product GET /products/:id(.:format) products#show PUT /products/:id(.:format) products#update DELETE /products/:id(.:format) products#destroy cart_index GET /cart/index(.:format) cart#index site_home GET /site/home(.:format) site#home site_shop GET /site/shop(.:format) site#shop site_guide GET /site/guide(.:format) site#guide site_links GET /site/links(.:format) site#links site_contact GET /site/contact(.:format) site#contact cart /cart(.:format) cart#index /cart/:id(.:format) cart#add /cart/remove/:id(.:format) cart#remove clearCart /clearCart(.:format) cart#clearCart home /home(.:format) site#home shop /shop(.:format) products#index guide /guide(.:format) site#guide links /links(.:format) site#links contact /contact(.:format) site#contact checkout /checkout(.:format) cart#createOrder /product_type/:id(.:format) products#product_type myprofile /myprofile(.:format) profiles#myprofile root / site#home ```

Original source