用网址模仿注销

时间:2012-06-03 07:02:03

标签: ruby-on-rails url routing

当我这样做时:

http://localhost:3000/signout

它说:

No route matches [GET] "/signout"

这是因为在我的路线配置文件中我有:

match '/signout', to: 'sessions#destroy', via: :delete

所以我的问题是,是否可以通过网址发送“删除”请求,而不是按下链接:

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

我可以通过网址模仿行动。

3 个答案:

答案 0 :(得分:0)

不是真的。虽然DELETE是HTTP规范的一部分,但几乎所有Web浏览器都只知道如何生成GETPOST个请求。当您使用link_to方法单击:delete时,Rails实际上会动态创建一个表单并将其“POST”回服务器。看看the source code

答案 1 :(得分:0)

如果您将浏览器指向http://localhost:3000/signout,则会生成GET请求,该请求与任何路由都不匹配。

如果您点击<%= link_to "Sign out", signout_path, :method => :delete %>生成的链接,那么您将获得所需的DELETE请求。换句话说,您的代码可以运行。

如果您未在此路线上使用其他方法,请将重构视为:

delete '/signout', to: 'sessions#destroy'

编辑:请注意,对于Rails,DELETE请求只是POST请求,参数_method设置为'delete'

答案 2 :(得分:-1)

match ':controller(/:action(/:id))(.:format)'

确保在最后一个路由器中停用此功能并尝试一次。