因此,当单击导航上的下拉菜单上的“注销”时,我会得到以下错误:
No route matches [GET] "/user/sign_out"然而,只有在使用下拉式导航(移动设备的汉堡包菜单)上的标志时,才会发生这种情况,而不是在常规导航上单击标志时才会发生。
见下面的代码:
<div class="container demo-5">
<div class="main clearfix">
<div class="column">
<div id="dl-menu" class="dl-menuwrapper">
<button class="dl-trigger">Open Menu</button>
<ul class="dl-menu dl-menu-toggle">
<div id="closebtn" onclick="closebtn()"></div>
<% if user_signed_in? %>
<li><%= link_to 'FAQ', faq_path %></li>
<li><a href="#">Contact Us</a></li>
<li><%= link_to 'My Account', account_path %></li>
<li><%= link_to 'Sign Out', destroy_user_session_path, method: 'delete' %></li> <--- this is the line
<% else %>
<li><%= link_to 'FAQ', faq_path %></li>
<li><a href="#">Contact Us</a></li>
<li><%= link_to 'Sign In', new_user_session_path %></li>
<li><%= link_to 'Free Trial', plans_path %></li>
<% end %>
</ul>
</div><!-- /dl-menuwrapper -->
</div>
</div>
</div><!-- /container -->
</div>这就是工作的非下拉代码:
<div class="signincontainer pull-right">
<div class="navbar-form navbar-right">
<% if user_signed_in? %>
<%= link_to 'Sign out', destroy_user_session_path, class: 'btn signin-button', method: :delete %>
<div class="btn signin-button usernamefont"><%= link_to current_user.full_name, account_path %></div>
<% else %>
....rest of code here更新错误:
ActionController::RoutingError (No route matches [GET] "/user/sign_out"):
actionpack (4.0.4) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.0.4) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.4) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.4) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.0.4) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.0.4) lib/rails/rack/logger.rb:20:in `call'
quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
actionpack (4.0.4) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/ru发布于 2014-06-08 00:27:08
method指定做一个符号。
在不工作的代码中,它当前是一个字符串:
link_to 'Sign Out', destroy_user_session_path, method: 'delete' 在正在工作的代码中,它被正确地指定为符号:
link_to 'Sign out', destroy_user_session_path, method: :delete发布于 2014-06-08 09:48:39
@colinm的回答是正确的;但让我解释一下为什么:
--
HTTP动词
安装时设置一系列RESTful路由。在它生成的路由中,有destroy_user_session_path,它使用delete HTTP谓词:
destroy_user_session DELETE /users/sign_out {controller:"devise/sessions", action:"destroy"}这意味着只有当您在您的delete方法中使用link_to方法时,此路由才可用,如下所示:
<%= link_to "Log Out", destroy_user_session_path, method: :delete %>默认为GET HTTP动词,这意味着如果您没有在代码中显式定义method: :delete,Rails将不会为路由查找正确的verb。
发布于 2014-06-07 20:11:45
让我们尝试一下;移除
devise_for :users, :path => 'user'加上这个;
devise_for :users, :path => 'user' do
get '/user/sign_out' => 'devise/sessions#destroy'
end更多;这里
最后的建议
我发现它可以将请求转换为删除;
所以
use devise_for :users, :path => 'user' in your config/routes确保在application.html.erb中加载了javascript
<%= javascript_include_tag "application" %>其次,确保jquery与jquery-ujs gem和类似的内容一起添加;
//= require jquery
//= require jquery_ujshttps://stackoverflow.com/questions/24101033
复制相似问题