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

afa*_*f12 1 ruby ruby-on-rails devise

我知道不同网站上有很多关于这个问题的问题.我已经尝试了很多东西,但仍然无法使用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
Run Code Online (Sandbox Code Playgroud)

我尝试过的修复如下:

初始链接:

<%= link_to "Sign out", destroy_user_session_path %>
Run Code Online (Sandbox Code Playgroud)

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

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)

将此添加到application.html.erb:

<%= javascript_include_tag :defaults %>
Run Code Online (Sandbox Code Playgroud)

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

= require jquery
= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)

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

config.sign_out_via = : delete
Run Code Online (Sandbox Code Playgroud)

对此:

config.sign_out_via = :get if Rails.env.test?
Run Code Online (Sandbox Code Playgroud)

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

No route matches [GET] "/users/sign_out" 
Run Code Online (Sandbox Code Playgroud)

GET链接不起作用:

没有路线匹配[GET]"/"

当然,我已经尝试重启服务器了.

耙路线包含:

 destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Jos*_*ech 8

在devise.rb中

config.sign_out_via = :delete

改成 config.sign_out_via = :get

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

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

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

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