Jquery Rails 3.2带装置:注销链接停止工作

Jquery Rails 3.2带装置:注销链接停止工作,jquery,html,ruby-on-rails,ruby-on-rails-3,devise,Jquery,Html,Ruby On Rails,Ruby On Rails 3,Devise,我的应用程序中的注销链接一直工作正常,然后就停止工作了。我已经有一段时间没有测试它了,但是我已经有一个月没有对任何与它相关的东西做任何更改了!当控制器应将其解释为删除请求时,它正在发送获取请求。这是我的密码: 我的视图中的我的ERB文件包括以下行: <li><%= link_to('Log Out', destroy_user_session_path, :method => :delete)%></li> 以下是我的GEM文件中的相关内容: sour

我的应用程序中的注销链接一直工作正常,然后就停止工作了。我已经有一段时间没有测试它了,但是我已经有一个月没有对任何与它相关的东西做任何更改了!当控制器应将其解释为
删除
请求时,它正在发送
获取
请求。这是我的密码:

我的视图中的我的ERB文件包括以下行:

<li><%= link_to('Log Out', destroy_user_session_path, :method => :delete)%></li>
以下是我的GEM文件中的相关内容:

source 'https://rubygems.org'
ruby "1.9.3"

gem 'rails', '3.2.13'
gem 'backbone-on-rails', '~> 1.1'
gem 'compass-rails'
gem 'devise', '>= 3.1.0'
gem 'ejs'
gem 'figaro'
gem 'jquery-rails'
gem 'pg'
gem 'sass-rails',   '~> 3.2.3'
这是呈现的实际html:

<li><a href="/users/sign_out" data-method="delete" rel="nofollow">Log Out</a></li>
这是我的服务器日志:

Started GET "/users/sign_out" for 127.0.0.1 at 2013-12-19 23:49:24 -0500

ActionController::RoutingError (No route matches [GET] "/users/sign_out")
以下是相关路线:

    new_user_session GET    /users/sign_in(.:format)     devise/sessions#new
        user_session POST   /users/sign_in(.:format)     devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format)    devise/sessions#destroy
链接生成的
GET
请求应该自动更改为
DELETE
请求,但现在不再是了,我不知道我更改了什么使其停止工作

更奇怪的是,每隔一段时间它就真的起作用了!在我的应用程序的另一个页面上也有相同的链接。这里是指向我的应用程序演示帐户的链接,您将在其中自动登录,以便您可以注销:


我想不出我在这里遗漏了什么。我知道我可以做一个变通方法,但是链接应该可以工作,并且到现在为止工作得很好,我想知道为什么不行。

当我阅读时,我看到它似乎通过在
文档上设置一个事件侦听器,将链接从
GET
转换为
DELETE
,如下所示:

// Link elements bound by jquery-ujs
linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]'

在我的应用程序中,有一次我遇到了一个复杂的情况,我需要从
文档中删除
click
事件,因为我没有使用任何其他的click处理程序,所以我只调用
$(document).off('click')
删除所有正在侦听的内容,单击
文档上的事件。显然,这是一件非常糟糕的事情。我用专门删除了我的点击处理程序的东西替换了这一行,一切都恢复了正常


教训是,如果您使用jQuery_ujs千万不要在
文档上使用
off()
,除非您可以针对特定的处理程序

应该有
POST
请求而不是
DELETE
GET
,因为某些浏览器不支持
DELETE`method@hawk,你是对的,但是因为它是一个链接,所以它只能
获取
,但是由于
数据方法=“删除”
部分,它应该自动更改为
删除
。它在我的应用程序中的其他地方起作用。Rails会将
method::delete
扩展为类似这样的
,然后只有在这之后,你的服务器才会威胁你的请求为
delete
请求而不是浏览器。我认为你的javascript部分检查有问题
jquery\u ujs
会按预期在每个页面上加载,每个页面上都会触发
document.ready
事件是的,页面加载后似乎不会调用rails.js。handleMethod是将get方法更改为delete的方法。或者,您可以在designe.rb中将
config.sign_out_via=:delete
更改为
config.sign_via=:get
,以使事情正常运行。
Started GET "/users/sign_out" for 127.0.0.1 at 2013-12-19 23:49:24 -0500

ActionController::RoutingError (No route matches [GET] "/users/sign_out")
    new_user_session GET    /users/sign_in(.:format)     devise/sessions#new
        user_session POST   /users/sign_in(.:format)     devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format)    devise/sessions#destroy
// Link elements bound by jquery-ujs
linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]'
$document.delegate(rails.linkClickSelector, 'click.rails', function(e) {
  var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;
... more code ...