gpt4 book ai didi

ruby-on-rails - 设计注销错误 - 找不到 UsersController 的操作 'show'

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:45 26 4
gpt4 key购买 nike

设计生成了以下代码以将用户注销:

<%= 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

有什么想法吗?

最佳答案

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

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

编辑:

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

<%= javascript_include_tag :defaults %>

在你的布局中。

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

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

如果你 reeeeaaaallllyyy 需要通过 GET 注销然后将其添加到你的

config/initializers/devise.rb:

config.sign_out_via = :get

关于ruby-on-rails - 设计注销错误 - 找不到 UsersController 的操作 'show',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8003493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com