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

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


当前回答

Add:

  <%= csrf_meta_tag %>  and 
  <%= javascript_include_tag :defaults %>  to layouts

使用这些link_to标记

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

  or

 link_to 'Sign out', '/users/sign_out', :method => :delete

在路由中添加:

  devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end

其他回答

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

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

观点:

<%= link_to "Logout", logout_path %>

对我来说,就是remove:method =>:delete

<%= link_to('Sign out', destroy_user_session_path) %>

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

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

变化:

:delete

... :

'delete'

所以对我有用的代码是:

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

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

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

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

  devise_for :users
  devise_scope :user do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end