我已经在我的应用程序上安装了设计,并在我的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"

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


当前回答

我想补充一点,尽管它有点老了。

“sign_out”链接没有工作,尽管有:method =>:delete。

注释指出<%= javascript_include_tag:defaults %>必须包括在内,这提醒我,我最近添加了JQuery java脚本,并使用简单的<script src=""/>标签来包括它们。

当我把它们从:defaults后面移到前面时,sign_out又开始工作了。

希望这能帮助到一些人。

其他回答

我认为退出的路由是一个DELETE方法。这意味着你的签出链接需要看起来像这样:

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

你的不包括:method =>:delete部分。另外,请注意,要实现这个功能,你还必须在布局文件(application.html.erb)中包含<%= javascript_include_tag:defaults %>。

我在rails 3.1.0中遇到了同样的问题,我解决了在文件中添加以下行:

app/assets/javascripts/application.js
//= require_tree
//= require jquery
//= require jquery_ujs

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

<%= 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.) 

尝试添加一个新的路由来设计/sessions#destroy并链接到它。例如:

routes.rb
devise_for :users do
  get 'logout' => 'devise/sessions#destroy'
end

观点:

<%= link_to "Logout", logout_path %>

看看你的路线。Rb有一个“resource:users”在“belonge_for:users”之前,然后尝试交换它们:

作品 devise_for:用户 资源:用户 失败 资源:用户 devise_for:用户