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

时间:2012-03-27 22:55:55

标签: ruby-on-rails ruby devise

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

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

版本:

  • 设计2.0.4
  • rails:3.2.2
  • Ruby:1.9.2
  • RVM:1.10.3

安装了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

提前致谢。

3 个答案:

答案 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' }