2012-06-03 31 views
2

当我这样做:模拟signout与URL

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模仿动作。

+0

如果您希望能够进入/注销,您需要通过获取以及删除来访问该路线。 –

回答

0

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

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

请确保在路由器中停用此功能,并且尝试一次。

+0

对不起,我修改网址,而不是URI – Saad

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'