我已经在我的应用程序上安装了设计,并在我的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"
知道是什么导致了这个错误吗?
我知道这是一个基于Rails 3的老问题,但我刚刚在Rails 4.0.4上遇到并解决了它。所以我认为我是如何修复它的任何人遇到这个问题与这个版本。不同的人可能有不同的想法,但以下是对我有用的方法。
首先确保已经安装了gems并运行bundle install。
gem 'jquery-rails'
gem 'turbolinks'
gem 'jquery-turbolinks'
在application.js中检查是否需要如下所示的所有内容。
注意,如果你这样做了:它是//= require jquery。Turbolinks和not //= require jquery-turbolinks
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require_tree .
接下来,在application.html.erb的头文件中添加适当的链接。
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= javascript_include_tag :defaults %>
关于如何实现delete方法,似乎有很多不同的方法,我认为这取决于您所使用的Rails版本。
这是我使用的删除语法。
<p><%= link_to "Sign Out", destroy_user_session_path, :method => 'delete' %></p>
希望这能帮助一些人走出这个非常令人沮丧的洞!
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