2010-07-16 23 views
1

我正在創建一個新的控制器/路由以僅允許HTTP GET和HTTP POST。該網址應該是/ foo。當然我的路線如下所示:Ruby on Rails:修復此路由以顯示404

map.connect 'foo', 
    :conditions => { :method => :get }, 
    :controller => "foo", 
    :action => "display_something" 

map.connect 'foo', 
    :conditions => { :method => :post }, 
    :controller => "foo", 
    :action => "register_foo" 

的這一點,我不明白的是,要http://example/foo/1帶來了「未知的行動」。我不希望/ foo/N可訪問。它應該給用戶一個404而不是引發ActionController :: UnknownAction。

望着RouteSet對象更近,我們有以下幾點:

>> rs.recognize_path "/foo/1" 
=> {:controller=>"foo", :action=>"1"} 

所以它找到一個途徑,這就是爲什麼我們沒有404

我一定要砍周圍的method_missing在ApplicationController中每當缺少一個操作方法時拋出一個404?如果沒有任何操作,我只想要一個404被拋出。在我的應用程序/富/ N沒有意義,我不想混淆用戶。

+0

您有任何其他路由處理foo?可能是資源路由?檢查'rake路由'的輸出或嘗試在再次測試之前註釋掉其他路由 – jdeseno 2010-07-16 16:31:19

+0

我假設這裏發生的是默認路由ANY /:controller /:action /:id/{}正在捲入其中,我仍然認爲它應該404,儘管如果這個動作丟失了。 – randombits 2010-07-16 16:36:16

回答

2

尋找@ActionController::Rescue的API文檔,看起來ActionController::UnknownAction的救援響應默認爲=>:not_found。我相信,在生產模式下,應該呈現404。嘗試在生產模式下運行您的應用程序&看它如何響應(或者,您應該只能看到日誌中的HTTP返回代碼。