无法使用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' }