当我这样做时:
http://localhost:3000/signout
它说:
No route matches [GET] "/signout"
这是因为在我的路线配置文件中我有:
match '/signout', to: 'sessions#destroy', via: :delete
所以我的问题是,是否可以通过网址发送“删除”请求,而不是按下链接:
<%= link_to "Sign out", signout_path, :method => :delete %>
我可以通过网址模仿行动。
答案 0 :(得分:0)
不是真的。虽然DELETE
是HTTP规范的一部分,但几乎所有Web浏览器都只知道如何生成GET
和POST
个请求。当您使用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)'
确保在最后一个路由器中停用此功能并尝试一次。