我已经在我的应用程序上安装了设计,并在我的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(t('logout'), destroy_user_session_path, :method => :delete) %>

删除方法需要指定

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

   <%= javascript_include_tag "myDirectiveJSfile" %> 

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

//= require jquery
//= require jquery_ujs

其他回答

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

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

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

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

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

在你的路线上。rb:

 devise_for :users do
    get '/sign_out' => 'devise/sessions#destroy'
    get '/log_in' => 'devise/sessions#new'
    get '/log_out' => 'devise/sessions#destroy'
    get '/sign_up' => 'devise/registrations#new'
    get '/edit_profile' => 'devise/registrations#edit'
 end

在你的application.html.erb中:

<%if user_signed_in?%>
          <li><%= link_to "Sign_out", sign_out_path %></li>
<% end %>

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

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

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

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

希望这能帮助到一些人。

页面中的“:method =>:delete”是“data-method="delete"” 所以你的页面必须有jquery_ujs.js,它会用delete方法提交链接,而不是用get方法