2

当我做:

http://localhost:3000/signout

它说:

No route matches [GET] "/signout"

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

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

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

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

我可以通过 URL 模仿动作。

4

3 回答 3

0

并不真地。尽管DELETE是 HTTP 规范的一部分,但几乎所有的 Web 浏览器都只知道如何发出GETPOST请求。当您link_to使用:delete方法单击 a 时,Rails 实际上会动态创建一个表单并将其“发布”回服务器。看看源代码

于 2012-06-03T13:35:37.600 回答
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'.

于 2012-06-03T19:22:49.733 回答
-1
match ':controller(/:action(/:id))(.:format)'

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

于 2012-06-03T07:09:00.703 回答