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

前端 未结 2 1036
再見小時候
再見小時候 2020-12-18 04:16

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 {:contro         


        
相关标签:
2条回答
  • 2020-12-18 04:51

    Way late to the party, but this was my solution. Simply prefix the controller as absolute with "/". A little long and ugly, but returns link for a controller/action or a route passed. I use it to build menus driven from sql table.

      # dynamic link_to
      def menu_link(params, html_options=nil)
        if params[:controller].present?
          link_to params[:display], {controller: "/#{params[:controller]}", action: params[:resource]}, default_navigation_options(html_options)
        elsif params[:route].present?
          link_to params[:display], params[:route], default_navigation_options(html_options)
        end
      end
    
    0 讨论(0)
  • 2020-12-18 05:02

    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!

    0 讨论(0)
提交回复
热议问题