2

「サインイン」ルート (GET /users/sign_in) にアクセスしようとすると、次のエラーが発生します...

No route matches {:action=>"home", :controller=>"devise/pages"}

サーバーログからの完全なエラーは次のとおりです...

Started GET "/users/sign_in" for 127.0.0.1 at 2012-06-05 00:51:54 -0700
  Processing by Devise::SessionsController#new as HTML
Rendered devise/shared/_links.erb (2.9ms)
Rendered devise/sessions/new.html.erb within layouts/application (33.5ms)
Rendered pages/_header.html.erb (75.9ms)
Completed 500 Internal Server Error in 349ms

ActionView::Template::Error (No route matches {:action=>"home", :controller=>"devise/pages"}):

これが私のアプリケーション/レイアウトの本体です...

<!-- BEGIN body -->
<body class="top">

    <!-- BEGIN .container -->
    <div class="container">

        <%= render 'pages/header' %>
        <%= render 'pages/menu' %>

        <p class="notice"><%= notice %></p>
        <p class="alert"><%= alert %></p>

        <%= yield %>

    <!-- END .container -->
    </div>

    <%= render 'pages/footer' %>

</body>

私が持っている唯一のコントローラーは「ページ」コントローラーです。また、ここに私のroute.rbファイルがあります...

MyApp::Application.routes.draw do

  devise_for :users

  match '/contact', :to => 'pages#contact'
  match '/news', :to => 'pages#news'
  match '/home', :to => 'pages#home'
  match '/features', :to => 'pages#features'

  root :to => 'pages#home'

end

それと関係があるかどうかはわかりませんが、rails generate devise:viewsコマンドを使用してビューも生成しました。

GET /users/sign_in を実行すると、存在しない "devise/pages" コントローラーと "home" アクションにアクセスしようとするのはなぜですか? それは、私が行ったときに私のルートが示すものではありませんrake routes...

new_user_session GET    /users/sign_in(.:format)       {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)       {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)      {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)      {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)      {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)        {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)               {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)       {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)          {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)               {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)               {:action=>"destroy", :controller=>"devise/registrations"}
                    root        /                              {:controller=>"pages", :action=>"home"}
                 contact        /contact(.:format)             {:controller=>"pages", :action=>"contact"}
                    news        /news(.:format)                {:controller=>"pages", :action=>"news"}
                    home        /home(.:format)                {:controller=>"pages", :action=>"home"}
                features        /features(.:format)            {:controller=>"pages", :action=>"features"}

あなたの知恵を前もってどうもありがとう!

編集リクエストにより部分的な「ページ/メニュー」を追加します...

<!-- BEGIN .menu-primary -->
    <div class="menu-primary">
        <table>
            <tr>
                <td class="menu">
                    <ul>
                        <li>
                            <a href="/news">News</a>
                        </li>
                        <li>
                            <a href="/features"><span>Shop Products</span></a>
                            <ul>
                                <li><a href="/features">Features</a></li>
                            </ul>
                        </li>
                        <li><a href="#"><span>Shop Parts</span></a><ul><li><a href="#">Controls (Coming Soon)</a></li><li><a href="#">Monitors (Coming Soon)</a></li><li><a href="#">Artwork (Coming Soon)</a></li><li><a href="#">Accessories (Coming Soon)</a></li></ul></li>
                        <li><a href="/contact">Contact Us</a></li>
                    </ul>
                </td>
            </tr>
        </table>
    <!-- END .menu-primary -->
    </div>

更新私のヘッダーテンプレートには、私が持っていた...

<%= link_to image_tag("mylogo.png", :alt=>"", :width=>"300", :height=>"100"), {:action => 'home', :controller => 'pages'} %>

これを削除すると、サインイン ページが正常に読み込まれます。どうして?!

4

4 に答える 4

4

の URL を作成するとき{:action => 'home', :controller => 'pages'}、Rails は現在のビューをレンダリングするコントローラーに関連するパスを使用します。サインイン ページの場合、それは「devise/sessions」になるため、名前空間で PagesController を探しdeviseます。

バックスラッシュを追加して、コントローラーがデバイス名前空間内ではなくルートにあることを指定することで、これを修正できます。

交換:

{:action => 'home', :controller => 'pages'}

これとともに:

{:action => 'home', :controller => '/pages'}
于 2012-06-09T02:09:40.727 に答える
1
"", :width="300", :height="100"), root_path %>

渡された link_to url の範囲は考案されていると思います。代わりに、rake ルートから生成されたパス名を使用する必要があります。

于 2012-06-08T07:57:35.673 に答える
-1

相対ファイルでエラーが表示される相対ファイルのコントローラーの先頭にバックスラッシュ「/」を追加する場所を見つけました(つまり、development.logのエラーを参照してください)私の場合:

= link_to "About", :controller => "/pages", :action => "about"

また

= link_to "Home", :controller => "/pages", :action => "home"
于 2014-09-23T06:36:51.997 に答える