6

ログインまたは登録しようとすると、Railsアプリケーションで以下のエラーが発生します(ログインにDevise GEMを使用しています)。

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

アプリケーションのすべてのソースコードはここにあります:https ://github.com/rossmc/topsnowboards

application.html.erbproduct/index.html.erbを次の場所から変更してみましたlink_to

<%= link_to 'sign in', new_user_session_path  %>

に:

<%= link_to 'sign in', :controller => "/products", new_user_session_path %>. 

しかし、これはさらに多くのエラーをスローします。

興味深いことに、前回のコミットでapplication.html.erbに配置したショッピングカートの部分を追加する前は、ログイン機能とルートは正常に機能していました。この部分を削除すると、ルーティングエラーは消えますが、部分的なviews / cart/_cart.html.erbが失われます。

以下は、ログインしてrakeroutesコマンドを実行しようとしたときのコンソールダンプです。これをご覧いただきありがとうございます。

コンソールダンプ

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)

すくいルート

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
4

2 に答える 2

11

スタックトレースを詳しく見てください。

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)

それを見つけた?ログには、。までのパーシャルの束がレンダリングされたことが示されていますcart/_cart.html.erb。49行目でエラーが発生したこともわかります。49行目はどうなっていますか?これ:

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

Ryanが次のコメントで正しく指摘しているように、RailsはDevise、レンダリングしているものであるため、部分的にスコープが設定されているものを探しています。

もっと簡単に言えば、ヘルパーがURLを形成するためにrake routes追加するルート名(にあるルート名)をフィードするだけです。のURL文字列になります。_pathproducts_pathproducts#index

あなたの場合はどちらが

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

あなたのスタックトレースを聞いてください、彼らはあなたと話しているのです!

于 2012-12-02T23:55:14.827 に答える
2

パーティーにかなり遅れましたが、これが私の解決策でした。コントローラの前に絶対プレフィックスとして「/」を付けるだけです。少し長くて醜いですが、コントローラー/アクションまたは渡されたルートのリンクを返します。SQLテーブルから駆動されるメニューを作成するために使用します。

  # 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
于 2016-08-31T23:00:03.307 に答える