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

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


当前回答

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,如果由于某些原因上面的不工作

其他回答

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

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

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

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

希望这能帮助到一些人。

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

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

变化:

:delete

... :

'delete'

所以对我有用的代码是:

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

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

让Logout链接成为DELETE RESTful调用的能力需要一个html属性data-method = " DELETE ",使用rails code = link_to('Logout', destroy_user_session_path,:method =>: DELETE)。

然而,如果你没有安装gem jquery-ujs,或者没有在你的application.html via = javascript_include_tag "application"中调用结果的javascript,响应将作为GET请求发送,路由将失败。

如果你不想使用jquery-ujs或者找不到让它工作的方法,你有几个选择:

改变配置。Sign_out_via等于:进入设计。rb(不推荐,因为DELETE是合适的RESTful查询) 或将link_to更改为= button_to('Logout', destroy_user_session_path,:method =>:delete)。使用button_to, Rails将在进行正确的DELETE调用时完成繁重的工作。然后,如果您愿意,可以将按钮样式设置为看起来像一个链接。

如果你使用的是Rails 3.1,确保你的application.html.erb签出如下所示:

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

你的javascript包含行如下所示

<%= javascript_include_tag 'application' %>

我的猜测是一些宝石覆盖了default.js位置的新结构。