如何在URL中手动指定:删除请求?

时间:2016-05-22 13:59:04

标签: ruby-on-rails http

情况: 我想破坏Rails中的当前会话,目前我正通过设计登录到管理模型设置。

我认为将site.io/admins/sign_out输入到网址中就足够了,但这会假定GET请求并且不起作用。

  

没有路线匹配[GET]“/ admins / sign_out”

需要进行method: :delete请求以销毁会话。

可以像site.io/admins/sign_out{action:delete}一样完成某些事情吗?

更新

根据请求,这是与admin相关的路由。

devise_for :admins

4 个答案:

答案 0 :(得分:1)

要使用设计注销,您需要POST到/admins/sign_out。我使用rails link_to来帮助解决这个问题。

<%= link_to "Log Out", destroy_admin_session_path, method: :delete %>

您也可以在没有ERB或link_to

的情况下执行此操作
<a rel="nofollow" data-method="delete" href="/admins/sign_out">Log Out</a>

对于user模型,只需将admin替换为user

即可
<%= link_to "Log Out", destroy_user_session_path, method: :delete %>

<a rel="nofollow" data-method="delete" href="/users/sign_out">Log Out</a>

来源:https://github.com/plataformatec/devise/wiki/How-To:-Add-sign_in,-sign_out,-and-sign_up-links-to-your-layout-template

答案 1 :(得分:1)

试试这个:

<%= link_to "Sign Out", destroy_admin_session_path, :method => :delete %>

答案 2 :(得分:0)

如果您强行注射site.io/admins/sign_out

它将使用Parameters: {"id"=>"sign_out"}将您发送到控制器的show动作。因为它假定它是一个show动作而不是调用Delete函数。

所以,我认为不可能直接从URL强制使用删除方法。

答案 3 :(得分:0)

不,您无法手动输入浏览器上的链接并将其注销,因为在浏览器中您无法指定PUT POSTDelete。如果您定义注销路径为GET方法您可以直接输入路径并将其记录为浏览器,默认情况下会提供GET方法。你可以像Rest邮件一样在Rest Client上进行,如下所示

http://localhost:3000/users/sign_out.html

选择方法DELETE