destroy_user_session_path在Rails中触发GET而不是DELETE

时间:2014-02-25 03:18:04

标签: ruby-on-rails

我在视图中有以下代码:

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

生成以下HTML:

<a data-method="delete" href="/users/sign_out" rel="nofollow">Sign out</a>

但是,点击该链接时,我收到以下错误:

No route matches [GET] "/users/sign_out"

我在这里做错了什么?为什么要进行GET而不是删除?

如果有帮助,我正在使用Twitter Bootstrap ......

3 个答案:

答案 0 :(得分:4)

你有吗

//= require jquery 
//= require jquery_ujs
你的application.js文件中的

另一种猴子补丁是修改devise.rb并将signout方法更改为get 像这样

配置/初始化/ devise.rb

config.sign_out_via = :get

这篇文章可能会有所启发: Rails 3.2 with Devise: logout link stopped working

答案 1 :(得分:1)

考虑这两点来摆脱这个错误:

  1. routes.rb中(如果您不想使用:delete方法):

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

  2. sign_out链接必须包含:method => :delete(已有)

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

    最后,在你的layout放置:

    <%= javascript_include_tag :defaults %>

  3. 感谢。

答案 2 :(得分:0)

link_to fails back to a get if Javascript is not enabled。看起来您的浏览器禁用了Javascript,或者更可能是页面上存在Javascript错误。如果您的页面上存在未被捕获的Javascript错误,则在发生错误后,所有其他Javascript将无法运行。