Rails错误 - 未定义的局部变量或方法`signout_path'

时间:2013-11-14 18:17:47

标签: ruby-on-rails

错误来自app / views / layouts / _header.html.erb。这条线是我的app / views / layouts / _header.html.erb的一部分,其中包括以下内容:

<header class="navbar navbar-fixed-top navbar-inverse">
  <div class="navbar-inner">
    <div class="container">
      <%= link_to "sample app", root_path, id: "logo" %>
      <nav>
        <ul class="nav pull-right">


       <li><%= link_to "Home", root_path %></li>
          <li><%= link_to "Help", help_path %></li>
          <% if signed_in? %>
            <li><%= link_to "Users", '#' %></li>
            <li id="fat-menu" class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                Account <b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><%= link_to "Profile", current_user %></li>
                <li><%= link_to "Settings", '#' %></li>
                <li class="divider"></li>
                <li>
                  <%= link_to "Sign out", signout_path, method: "delete" %>
                </li>
              </ul>
            </li>
          <% else %>
            <li><%= link_to "Sign in", signin_path %></li> 
         <% end %>        
        </ul>  
      </nav>
    </div>
  </div>
</header>

1 个答案:

答案 0 :(得分:0)

好的,这里已经很晚了,我不会等你的rake route或routes.rb文件的输出。 正如我的评论中所提到的,到你的shell,cd到你的应用程序目录并运行

rake routes

这将显示所有可能的路线。可能已经有了退出流程的途径。

如果没有,则必须在/config/routes.rb中创建路由并将其指向正确的控制器。例如

delete '/logout', to: 'sessions#destroy', as: 'signout'

其中'delete'是请求,'/ logout'我的示例url,'sessions'控制器和'destroy'它的动作和'signout'你的方法名称(正如你在代码中所希望的那样)。 你可以写

delete '/logout', to: 'sessions#destroy'

在这种情况下,您必须使用url替换方法名signout_path

最后一个提示:使用GET而不是DELETE也可以完成注销。也许你创建了一个只有GET方法的路线?在rake routes的输出中也应该是显而易见的。