【问题标题】:Rails: What in my code determines which http verb is used in a route 'call'?Rails:我的代码中的什么决定了路由“调用”中使用哪个 http 动词?
【发布时间】:2015-02-11 07:35:55
【问题描述】:

Rails Routing from the outside in 页面的第 2.2 节中,讨论了如何使用 http 动词和 URL 将 4 个 URL 匹配到 7 个路径。

在 2.3 节中,它解释了辅助路径是如何可用的,果然,有 4 条路径似乎与 2.2 节中的表格中的路径相对应。

我想知道在调用路径时是什么决定了使用哪个动词。例如,假设我有resource :photos,我打电话:

redirect_to photo_path(10)

什么告诉我该选项的 3 个可用动词中的哪一个(GET、PUT/PATCH 或 DELETE - 根据上面第 2.2 节中的表格)将作为路由的一部分包含在内?

【问题讨论】:

    标签: ruby-on-rails helper httpverbs


    【解决方案1】:

    Path 是路径,它不包含VERB (HTTP METHOD) 信息。例如,showdestroy 资源操作的路径默认相同,并且您使用相同的路径助手(但 HTTP 方法不同):

    <%= link_to 'show photo', photo_path(photo) %> <!-- returns 'default' link, so GET method is used here -->
    <%= link_to 'delete photo', photo_path(photo), method: :delete %>
    

    总是使用get 执行重定向。

    【讨论】:

    • 好的,但是这两行做不同的事情,对吧?如果路径相同,它们如何触发不同的动作?是method :delete 造成了不同吗?
    • @moosefetcher 是的,method: :delete 将属性data-method="delete" 添加到a 标记中,向浏览器指示它应该使用DELETE 方法。
    • 谢谢。所以在某些情况下,您可以控制使用哪个动词。我猜我需要了解一大堆这些任意事实 - 例如:'重定向总是使用 GET 执行'。目前,Rails 非常深奥且令人困惑。我猜我需要对任何数量的其他单任务示例提出类似的问题。不过谢谢你的回复。
    • @moosefetcher 在大多数情况下,您可以控制使用哪个动词。当然,也有一些默认值,例如默认情况下form 标签使用POST 方法,常规链接使用GET,但您可以更改此行为。您不能只更改重定向中的方法,该方法始终为GET。顺便说一句,Rails 与这种行为无关——它与 HTTP 协议有关。
    • 但似乎是 Rails 在其“约定优于配置”中隐藏了信息。不,我不想每件事都写代码。我只是希望以对新手有用的方式解释这些信息。我最近才意识到路径有效地指向路线。每个人都在谈论检查 rake 路由,但我什至不知道这些路由是如何访问的。这很令人沮丧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多