在rails中定义link_to以删除对象/项时,必须在该link_to中指定方法delete,与edit(edit_event_path(@event))或show(event_path)相比。为什么会这样?
答案 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
定义:
这意味着如果您想要destroy
一个对象,可以使用delete
动词
-
<强> OOP 强>
对此更具体的定义在于Ruby(&amp; Rails)的object-orientated结构。路由系统基于这种结构(因此它们被称为resources
) - 这意味着如果您将路由系统视为基于对象,您可以开始看到一个模式出现< / p>
如果你打算为一个对象调用route
,IE到destroy
那个对象,你的路线应该是“对象”,而不是“破坏”机制
从这个意义上讲,如果你想破坏一个对象,使用以下内容会更有意义:
<%= link_to "Destroy", object_path(object), method: :delete %>
这使您可以灵活地在对象周围创建操作,然后可以根据需要将其路由到特定的控制器#操作