无法使用Devise gem在Rails应用中注销,没有路由匹配/ users / sign_out

我知道不同网站上有很多关于这个问题的问题。 我已经尝试了很多东西,但仍然无法使用DELETE方法获得链接。

我创建了一个空的rails应用程序

版本:

  • 设计2.0.4
  • 铁轨:3.2.2
  • Ruby:1.9.2
  • RVM:1.10.3

在我安装了devise gem之后,我运行了以下命令:

rails generate devise:install rails generate devise User 

我尝试过的修复如下:

初始链接:

  

我在ticks中添加了删除方法,没有它们:

  'delete' %>  :delete %> 

将此添加到application.html.erb:

  

我在assets / javascripts / application.js中取消注释了这些行:

 = require jquery = require jquery_ujs 

我也尝试让GET链接起作用,从config / initializers / devise.rb更改了这一行

 config.sign_out_via = : delete 

对此:

 config.sign_out_via = :get if Rails.env.test? 

无论我尝试什么,DELETE链接都会导致:

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

GET链接不起作用:

没有路线匹配[GET]“/”

我当然试过重启服务器。

Rake路线包含:

  destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy 

提前致谢。

在devise.rb中

找到config.sign_out_via = :delete

更改为config.sign_out_via = :get

如果你使用:get确保你正在使用:method =:get,如果你正在使用:delete using:method =>:delete in link

在生产中你可能需要交换它,所以你应该使用if语句来检查RAILS_ENV

在您的示例中,您可能正在开发模式下运行而不是测试,这就是它可能无法正常工作的原因。

并重新启动您的服务器,因为它是初始化程序。

这个助手总是对我有用:

 link_to "Logout", destroy_user_session_path, :method => :delete 

也许你没有正确登录? 您可以查看if current_user

我们能看到您的路线档案吗?

特别是devise_for调用

您还可以尝试显式设置路径

devise_for :users, path_names: { sign_out: 'sign_out' }