删除路由与获取 - Rails控制器的方法

时间:2015-10-26 07:30:42

标签: ruby-on-rails rest routes railstutorial.org conventions

在Michael Hartel的Rails教程中,他建议在oder中创建以下路由以注销用户:

delete 'logout' => 'sessions#destroy'

这似乎在整个应用程序中添加了一些不必要的工作,例如,需要包含方法的链接:" delete"。以下也很有效:

get 'logout' => 'sessions#destroy' 

为什么惯例使用"删除"方法而不仅仅是"得到"?有一些隐藏的优势吗?

3 个答案:

答案 0 :(得分:1)

有很多原因,其中两个是最重要的:

  • 防止包含迷路“破坏”链接(在销毁链接中使用DELETE意味着您必须明确定义它)

  • 构成"resourceful" structure of HTTP 的一部分(并不重要,但如果您想创建“真正的”网络应用,则使用正确的网址结构至关重要)< / p>

<强>链接

对于许多人来说,最重要的原因是在你的观点中加入了迷失的“破坏”链接。

销毁一个对象(这是DELETE方法所表示的意思)是一项严肃的努力 - 你需要确保你所包含的链接是合法的&amp;不能混淆。

明确声明method: :delete会立即为链接添加授权级别,足以让您确保链接是有原因的。

我看到人们忽略了method他们的链接切换的次数是荒谬的 - 想象一下,如果你有能力销毁一些具有这种随意结构的数据。你的代码中有很多错误......

-

<强>资源

第二个原因更为重要 - 它保留了resourceful nature of HTTP

  

HTTP资源uniform resource locators (URLs)使用uniform resource identifier (URI)计划httphttps标识并位于网络上。 URIs文档中的hyperlinksHypertext Markup Language (HTML)形成了相互关联的超文本文档。

简单地说,HTTP的真实结构(为“网络”提供支持的协议)就是意味着通过它加载资源

This video解释得很清楚: enter image description here

这些资源应通过特定的urls定位,如果您正确考虑,只需要有一定数量的排列,以便管理资源。

事实上,当涉及到Rails时,许多人第一次参与了网络的足智多谋的性质,因此这样的问题。在使用Rails之前我不知道它...这就是为什么理解为什么 this type of setup如此有效的原因非常重要:

enter image description here

以上显示使用rails resources帮助程序时会发生什么(我强烈建议您使用):

#config/routes.rb
resources :sessions, path: "", path_names: { destroy: "logout" }

这将创建一组“足智多谋”的链接(如上所述)。这些链接基本上表示您应该如何处理应用上的资源,当然将DELETE方法放在destroy操作中。

您不必使用DELETE,但它确实使您的应用程序更加通用!

答案 1 :(得分:0)

获取与DELETE请求不同。

GET - 从指定资源请求数据 DELETE删除指定的资源

请参阅HTTP REQUEST

答案 2 :(得分:0)

delete 'logout' => 'sessions#destroy'

主要目标是制作有意义/语义的http请求。

因为它对应于通过session操作删除destroy对象; RESTful建议使用语义HTTP动词delete而不是get。此外,Rails默认将delete动词映射到destroy动作。

由于您在删除会话后没有收到任何内容,因此您被重定向到其他地方;因此,建议使用AJAX方法进行delete次调用。

enter image description here

有关详细信息,请参阅此内容 https://parse.com/docs/rest/guide