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

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


当前回答

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

其他回答

一般来说,当你得到“没有路由匹配”,但你认为你已经定义了路由,然后再次检查http verb / request方法(是否它的get, put, post, delete等)的路由。

如果您运行rake路由,那么您将看到预期的方法,您可以将其与请求日志进行比较。

For Rails 7

我们在importmap中手动导入jquery和jquery-ujs。rb:

pin "jquery", to: "https://ga.jspm.io/npm:jquery@3.6.0/dist/jquery.js"
pin "jquery-ujs", to: "https://cdnjs.cloudflare.com/ajax/libs/jquery-ujs/1.2.3/rails.min.js"

或者对于jquery使用:

./bin/importmap pin jquery

然后手动输入jquery-ujs的第二行

我们用下面的代码创建文件:app/javascript/src/jquery.js:

import jquery from 'jquery'
window.jQuery = jquery
window.$ = jquery

然后我们将它们导入app/javascript/application.js:

import "src/jquery"
import "jquery-ujs"

我们不需要改变配置就完成了。Sign_out_via =:delete of device .rb

**注意:对于jquery可能需要一个yarn,如果由于某些原因上面的不工作

另一个选项是将注销配置为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,因为这种方法的语义。

在你的路线上使用它。rb文件:

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

我知道这是一个基于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>

希望这能帮助一些人走出这个非常令人沮丧的洞!