2012-02-08 54 views
1

我刚开始学习Ruby on Rails,这是一个新手问题。为什么Ruby on Rails使用“link_to ... method :: delete”?

我做

$ rails generate scaffold Product blah blah... 

,这里是从脚手架生成的视图文件的片段。

<td class="list_actions"> 
<a href="/products/1">Show</a><br/> 
<a href="/products/1/edit">Edit</a><br/> 
<a href="/products/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a> 
</td> 

我的问题是,

为什么Ruby on Rails的生成这样的链接, “Destory”?将方法更改为“HTTP DELETE”...以及所有这些。

而是更直接的方式做的, 即

<a href="/products/1/delete" data-confirm="Are you sure?">Destroy</a> 
+4

如果谷歌机器人发布GET请求来抓取您的网站,它可能会最终删除您的所有产品! – daniel 2012-02-08 11:46:54

+0

@daniel nub问题。机器人只使用GET方法(而不是POST,DELETE,PUT等)抓取链接? – hajpoj 2012-03-02 20:07:57

+0

通常情况下,僵尸程序通常只能发出GET请求,尽管看起来Googlebot正在试验POST请求[http://googlewebmastercentral.blogspot.com/2011/11/get-post-and-safely-surfacing-more-of.html] – daniel 2012-03-03 17:12:48

回答

2

因为它是语义会工作。

虽然网页浏览器一般只发送HTTP GET和POST请求,请求的语义意图是它们映射一个到一个与CRUD动词:

  • POST < - >创建
  • GET < - >阅读
  • PUT < - >更新
  • DELETE < - >删除

......并且从实际的角度来看,足智多谋的路线反映了这一点。

2

因为缺省情况下,你必须such routes for the resources和默认方法用于破坏行动和PUT方法用于更新和删除。所以,如果你做链接是这样的:

<a href="/products/1/delete" data-confirm="Are you sure?">Destroy</a> 

比它会指向获取行动的URL /products/:id/delete且仅当您定义的路由在routes.rb文件