设计注销错误 - 找不到用户控制器的操作“显示”

Posted

技术标签:

【中文标题】设计注销错误 - 找不到用户控制器的操作“显示”【英文标题】:Devise Sign Out Error - The action 'show' could not be found for UsersController 【发布时间】:2011-12-21 15:43:42 【问题描述】:

Devise 生成了以下代码来注销用户:

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

并且在执行rake routes时出现路由

destroy_user_session DELETE     /users/sign_out(.:format)
:action=>"destroy", :controller=>"devise/sessions" 

但是我收到一条错误消息:

The action 'show' could not be found for UsersController

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

编辑:

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

&lt;%= javascript_include_tag :defaults %&gt;

在你的布局中。

>>重要提示:您不能在地址栏中输入注销 url 并回车,因为它是 GET 而不是 DELETE 请求,所以它不起作用。这背后的神奇之处在于,一个 javascript 助手将连接到链接的“onclick”事件,然后提交一个隐藏表单(通过 POST)到 url 的 href 目标,其中包含一个名为 _method 的隐藏字段值“删除”。

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

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

config/initializers/devise.rb

config.sign_out_via = :get

【讨论】:

我已经尝试添加它,但不幸的是仍然看到同样的错误。还有其他想法吗? cl.ly/3h1T3n1k3h1D2c270u2H 谢谢你,但是它仍然不起作用:(该链接上有一个data-methid="delete" 属性,并且默认的javascript文件包含在布局中。还有其他想法吗? 打开rails服务器控制台,看看如果你点击注销会发生什么:有Started DELETE "/users/sign_out"这样的行吗? 不,没有类似的东西。这是生成的而不是AbstractController::ActionNotFound (The action 'show' could not be found for UsersController) 有趣 - 实际上它应该带你到 SessionsController 是否有另一条指向 /users/sign_out 的路线? (重要提示:/users/sign_out 是通过 GET 还是 DELETE 调用的?-只是为了确保它不是客户端/javascript 问题)【参考方案2】:

检查以确保您的 application.js 中需要 jquery 为“//= 需要 jquery”。将它放在 application.js 中的“//= require jquery_ujs”之上。然后重启服务器。

【讨论】:

以上是关于设计注销错误 - 找不到用户控制器的操作“显示”的主要内容,如果未能解决你的问题,请参考以下文章

开机就显示:Windows 找不到本地配置文件,用临时配置文件让您登录。

注销当前用户后 Win10找不到Administrator用户登录选项怎么解决

在 本地计算机 无法启动 Terminal Servicse 服务 错误 126 找不到指定模块

net use 连接的时候显示发生系统错误53找不到网络路径怎么回事

找不到路径“/sessions/user”的设计映射设计登录错误

用例设计面试题