我已经在我的应用程序上安装了设计,并在我的application.html.erb文件中应用了以下内容:

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>

我运行了rake路由,确认所有路由都是有效的。

同样,在我的路线上。我有belonge_for:users和root:to => "home#index"。

当点击“签出”链接时,我得到以下路由错误:

No route matches "/users/sign_out"

知道是什么导致了这个错误吗?


当前回答

有很多解决方案。但主要是用这个,

<%= link_to 'Sign out', destroy_user_session_path, method: :delete %>

或者配置设计。Rb使用正确的sign_out方法

在devise.rb

config.sign_out_via = :delete ( or  :get which u like to use.) 

其他回答

另一个选项是将注销配置为GET而不是DELETE,您可以在/config/initializers/ devie.rb上添加以下行

config.sign_out_via = :get

但正如Steve Klabnik在他的博客(http://blog.steveklabnik.com/2011/12/11/devise-actioncontroller-routingerror-no-route-matches-get-slash-users-slash-sign-out.html)上所写的,尝试使用DELETE,因为这种方法的语义。

我在设计中修改了这一行。

config.sign_out_via = :delete

to

config.sign_out_via = :get

它开始对我有用。

问题开始于rails 3.1…在/app/assets/javascript/中查找application.js。

如果文件不存在,创建一个文件名,我不知道为什么我的文件消失了,或者从来没有在“rails new app”....上创建

该文件是jquery....的实例

大多数答案都是片面的。这个问题我已经遇到过很多次了。有两件事需要解决:

<%= link_to(t('logout'), destroy_user_session_path, :method => :delete) %>

删除方法需要指定

然后设计使用jquery,所以你需要加载这些

   <%= javascript_include_tag "myDirectiveJSfile" %> 

确保在myDirectiveJSfile.js中同时指定了jquery和jquery-ujs

//= require jquery
//= require jquery_ujs

只有一个例外,杰西的回答对我很管用:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

变化:

:delete

... :

'delete'

所以对我有用的代码是:

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>