2012-02-08 41 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文件

相關問題