在Michael Hartel的Rails教程中,他建议在oder中创建以下路由以注销用户:
delete 'logout' => 'sessions#destroy'
这似乎在整个应用程序中添加了一些不必要的工作,例如,需要包含方法的链接:" delete"。以下也很有效:
get 'logout' => 'sessions#destroy'
为什么惯例使用"删除"方法而不仅仅是"得到"?有一些隐藏的优势吗?
答案 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)
计划http
和https
标识并位于网络上。URIs
文档中的hyperlinks
和Hypertext Markup Language (HTML)
形成了相互关联的超文本文档。
简单地说,HTTP的真实结构(为“网络”提供支持的协议)就是意味着通过它加载资源。
This video解释得很清楚:
这些资源应通过特定的urls
定位,如果您正确考虑,只需要有一定数量的排列,以便管理资源。
事实上,当涉及到Rails时,许多人第一次参与了网络的足智多谋的性质,因此这样的问题。在使用Rails之前我不知道它...这就是为什么理解为什么 this type of setup如此有效的原因非常重要:
以上显示使用rails resources
帮助程序时会发生什么(我强烈建议您使用):
#config/routes.rb
resources :sessions, path: "", path_names: { destroy: "logout" }
这将创建一组“足智多谋”的链接(如上所述)。这些链接基本上表示您应该如何处理应用上的资源,当然将DELETE
方法放在destroy
操作中。
您不必使用DELETE
,但它确实使您的应用程序更加通用!
答案 1 :(得分:0)
答案 2 :(得分:0)
delete 'logout' => 'sessions#destroy'
主要目标是制作有意义/语义的http请求。
因为它对应于通过session
操作删除destroy
对象; RESTful
建议使用语义HTTP动词delete
而不是get
。此外,Rails默认将delete
动词映射到destroy
动作。
由于您在删除会话后没有收到任何内容,因此您被重定向到其他地方;因此,建议使用AJAX
方法进行delete
次调用。
有关详细信息,请参阅此内容 https://parse.com/docs/rest/guide