【问题标题】:Rails 3.1 + Devise: The default routes for Devise aren't workingRails 3.1 + Devise:Devise 的默认路由不起作用
【发布时间】:2012-06-05 07:44:59
【问题描述】:

当我尝试访问“登录”路由 (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 时,为什么它试图访问不存在的“设计/页面”控制器和“主页”操作?这不是我做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'} %>

删除它可以让我的登录页面成功加载。为什么?!

【问题讨论】:

  • 根路径通常应该在你的路由的底部
  • 感谢您的提示!虽然它没有改变任何东西。
  • 您是否重新启动了服务器?你能给我完整的错误信息吗?
  • 出于好奇,您的“页面/菜单”部分是什么样的?根据堆栈跟踪,看起来这就是可能发生错误的地方。我想知道部分中是否有指向“pages/home”之类的链接,出于某种原因,它假定它应该在设计命名空间下寻找部分。
  • 感谢您发布@BeachRunnerJoe,部分菜单中没有任何内容对我产生影响。我猜想在该调用中呈现的模板之一的某个地方有一个动态链接到正在设置的 pages#home 但是,无论出于何种原因,它都被视为在设计名称空间下。不过不确定,可能是别的东西。

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 devise


【解决方案1】:

在为{:action =&gt; 'home', :controller =&gt; 'pages'} 构造 URL 时,Rails 使用相对于呈现当前视图的控制器的路径。 对于登录页面,这将是“设计/会话”,因此它会在 devise 命名空间中查找 PagesController。

您可以通过添加反斜杠来指定控制器在根目录中,而不是在设计命名空间中来修复它。

替换:

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

用这个:

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

【讨论】:

    【解决方案2】:
    "", :width=>"300", :height=>"100"), root_path %>

    我相信传递的 link_to url 的范围是设计的。您应该改用从 rake 路由生成的路径名。

    【讨论】:

      【解决方案3】:

      我在安装 Devise 时遇到了同样的问题,之后就无法运行任何东西。但就我而言,我尝试使用 Rails 在路由页面上指向的路由来解决它:

      <%= link_to 'Home', {:controller => 'frontpages', :action => 'services'}, class: 'footer-nav-link' %>
        
      To:
        
      <%= link_to 'Services', frontpages_services_path, class: 'footer-nav-link' %>

      一切都在后面。

      【讨论】:

        【解决方案4】:

        我找到了在相对文件的控制器开头添加反斜杠“/”的地方,错误将显示在相关文件中(参见错误,即 development.log) 就我而言:

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

        = link_to "Home", :controller => "/pages", :action => "home"
        

        【讨论】:

          猜你喜欢
          • 2010-11-19
          • 2012-10-20
          • 2013-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多