【问题标题】:Why doesn't direct path for delete/destroy exist in rails?为什么rails中不存在删除/销毁的直接路径?
【发布时间】:2014-08-06 23:56:26
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

在典型的 link_to 链接中,浏览器会发送 HTTP GET 请求。当你销毁一个资源时,浏览器应该发送一个 HTTP DELETE 请求。 Rails 有一些 javascript 将在这些链接上运行并拦截单击以向标有 method::delete 的链接发送 HTTP DELETE 请求。单个资源被销毁和显示的路径也是一样的。

event_path 将返回“/event/1”或类似的。当发送一个 HTTP GET 请求时,它期望你的控制器的 show 动作会被调用。当向 same 路径发送 HTTP DELETE 请求时,预计会调用销毁操作。

【讨论】:

    【解决方案2】:

    HTTP 动词

    简单地说,Rails 使用了管理 Web 的 HTTP Verbs

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

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

    --

    面向对象

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

    如果你要为一个对象调用route,IE 到destroy 该对象,你的路由应该是“对象”,而不是“销毁”机制

    从这个意义上说,如果你想销毁一个对象,那么使用以下内容会更有意义:

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多