为什么在rails中不存在删除/销毁的直接路径?

时间:2014-08-06 23:56:27

标签: ruby-on-rails ruby path destroy http-delete

在rails中定义link_to以删除对象/项时,必须在该link_to中指定方法delete,与edit(edit_event_path(@event))或show(event_path)相比。为什么会这样?

2 个答案:

答案 0 :(得分:2)

在典型的link_to链接中,浏览器将发送HTTP GET请求。当您销毁资源时,浏览器应发送HTTP DELETE请求。 Rails有一些javascript将在这些链接上运行并截取单击以发送标记为method :: delete的HTTP DELETE请求。此外,单个资源的销毁和显示路径也是相同的。

event_path将返回“/ event / 1”或类似内容。发送HTTP GET请求时,预计将调用控制器的show动作。向相同的路径发送HTTP DELETE请求时,预期将调用destroy操作。

答案 1 :(得分:1)

HTTP动词

简单地说,Rails使用管理网络的HTTP Verbs

基本上,为了简化路由结构,Rails允许您生成一系列“相同”的URL路径,每个路径都使用不同的http verbs定义:

enter image description here

这意味着如果您想要destroy一个对象,可以使用delete动词

-

<强> OOP

对此更具体的定义在于Ruby(&amp; Rails)的object-orientated结构。路由系统基于这种结构(因此它们被称为resources) - 这意味着如果您将路由系统视为基于对象,您可以开始看到一个模式出现< / p>

如果你打算为一个对象调用route,IE到destroy那个对象,你的路线应该是“对象”,而不是“破坏”机制

从这个意义上讲,如果你想破坏一个对象,使用以下内容会更有意义:

<%= link_to "Destroy", object_path(object), method: :delete %>

这使您可以灵活地在对象周围创建操作,然后可以根据需要将其路由到特定的控制器#操作