2011-11-18 122 views
1

的Ruby 1.9.2,Rails的3.1奇怪的路由問題

這裏是我的routes.rb

resources :ads 

我想這個項目被認爲涵蓋幾乎所有的都在/廣告網址放置和在控制器中有相應的方法。這個奇怪的東西適用於/ ads下的所有內容,但是當我嘗試訪問ads /:id/delete時,我收到一個錯誤: 沒有路由匹配[GET]「/ ads/50/delete」

If I添加明確的條目,

match 'ads/:id/delete' => 'ads#delete' 

然後一切正常

從控制器項

def delete 
     @ad=Ad.find(params[:id]) 
     @ad.destroy 
     redirect_to '/ads' 
    end 

一)我試圖弄清楚爲什麼把入境旅遊廣告不起作用˚F或/ ads /:id/delete b)任何關於調試路由問題的簡單方法的指針將不勝感激。

UPD: 輸出爲耙路線

c:\RailsInstaller\work\mebay>rake routes 
    ads GET /ads(.:format)   {:action=>"index", :controller=>"ads"} 
     POST /ads(.:format)   {:action=>"create", :controller=>"ads"} 
new_ad GET /ads/new(.:format)  {:action=>"new", :controller=>"ads"} 
edit_ad GET /ads/:id/edit(.:format) {:action=>"edit", :controller=>"ads"} 
    ad GET /ads/:id(.:format)  {:action=>"show", :controller=>"ads"} 
     PUT /ads/:id(.:format)  {:action=>"update", :controller=>"ads"} 
     DELETE /ads/:id(.:format)  {:action=>"destroy", :controller=>"ads"} 
       /ads/:id/delete(.:format) {:controller=>"ads", :action=>"delete"} 

回答

2

所產生的是「REST風格」的路線 - 所以當你得到訪問創建,更新,刪除等記錄,則有以確保您使用正確的REST動詞。在你的情況下,它看起來像你試圖發送GET請求到你的刪除路徑,這是行不通的。您需要改爲發送DELETE請求。

如果您發佈您的實際代碼這是我們用來刪除此鏈接,我們可以給你一個更具體的答案,但一般的刪除鏈接應該是這個樣子:

<%= link_to "Delete", ad_path(@ad), :method => :delete %> 

這將發出一個DELETE請求/ ads /:id,哪些Rails知道應該調用您的destroy操作。

@ Tilo的答案中的官方Ruby on Rails路由指南是一個偉大的資源,您應該在繼續前進行閱讀。 「

+0

」它看起來像你試圖發送GET請求到你的刪除路徑,這是行不通的。「 _________________我對這些事情不太滿意,但看起來這就是發生了什麼。當我啓用顯式路由(匹配'ads /:id/delete'=>'ads#delete')時,webrick控制檯中的跟蹤會顯示GET請求:「Started GET」/ ads/56/delete「for 127.0.0.1 at 2011 -11-17 23:14:37 -0500通過AdsController處理#以HTML格式刪除參數:{「id」=>「56」}「[這一切正常]當然,我並不堅持這種做事的方式,只是想明白。 – Elijah