设计退出错误

时间:2011-11-04 00:04:38

标签: ruby-on-rails ruby ruby-on-rails-3 devise

按照相关的设计教程,我已经陷入了最后的障碍。

Devise生成以下代码以签署用户:

<%= link_to "Sign out", destroy_user_session_path %>

执行rake routes

时会显示路线
destroy_user_session DELETE     /users/sign_out(.:format)
{:action=>"destroy", :controller=>"devise/sessions"} 

但是我收到错误说:

找不到UsersController

的动作'show'

有什么想法吗?

2 个答案:

答案 0 :(得分:22)

路径是正确的但如果你仔细观察,你会发现它不是GET请求而是DELETE请求所以传递方法:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

编辑:

这应该为您的链接添加data-method="delete"属性。验证(查看生成的HTML)。如果该属性存在且单击该链接时没有任何反应,请确保您已在布局中包含默认的javascript文件。应该有一句话:

<%= javascript_include_tag :defaults %>

在您的布局中。

&gt;&gt;重要&lt;&lt; :您无法在地址栏中输入退出网址并按Enter键,因为它是GET而不是DELETE请求,所以无效。这背后的魔力是javascript助手会挂钩链接的“onclick”事件,然后将隐藏的表单(通过POST)提交到url的href目的地,其中包含一个名为{{1的隐藏字段使用值“delete”。

为什么这一切?这是一个安全问题,否则有人可能会将您重定向到注销页面,只需将您注销,所有未保存的会话内容都将消失......

如果您需要通过GET注销,请将其添加到您的

<强>配置/初始化/ devise.rb

_method

答案 1 :(得分:0)

检查以确保您的application.js中有必需的jquery,例如“ // = require jquery”。将其放在application.js中的'// = require jquery_ujs'之上。然后重新启动服务器。