我知道不同网站上有很多关于这个问题的问题。我已经尝试了很多东西,但仍然无法使用DELETE方法获得链接。
我创建了一个空的rails应用程序
版本:
安装了devise gem后,我运行了这些命令:
rails generate devise:install
rails generate devise User
我尝试过的修复方法如下:
初始链接:
<%= link_to "Sign out", destroy_user_session_path %>
我添加了删除方法,以刻度并没有它们:
<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
将此添加到application.html.erb:
<%= javascript_include_tag :defaults %>
我在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
提前致谢。
答案 0 :(得分:8)
in devise.rb
找到config.sign_out_via = :delete
更改为config.sign_out_via = :get
如果你使用:get,请确保你正在使用:method =:get,如果你正在使用:delete using:method =&gt; :删除链接
在生产中你可能需要交换它,所以你应该使用if语句来检查RAILS_ENV
在您的示例中,您可能正在开发模式下运行而不是测试,这就是为什么它可能无法正常工作。
重新启动服务器,因为它是初始化程序。
答案 1 :(得分:2)
这个助手总是对我有用:
link_to "Logout", destroy_user_session_path, :method => :delete
也许您没有正确登录?您可以查看if current_user
答案 2 :(得分:0)
我们可以看到您的路线档案吗?
具体是devise_for电话
您也可以尝试明确设置路径
devise_for :users, path_names: { sign_out: 'sign_out' }