按照相关的设计教程,我已经陷入了最后的障碍。
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'有什么想法吗?
答案 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'之上。然后重新启动服务器。