2010-05-07 44 views
4

我試圖構造URL格式爲http://servername/find/by/CRITERION/VALUE使用IP地址結束Rails 2 URL會導致路由錯誤?

CRITERION是一個有限的字符串集合,正如VALUE。麻煩的是,VALUE在某些情況下需要成爲IP地址,並且會導致路由錯誤。

這裏是我的路線:

map.find 'find/by/:criterion/:query', :controller => "find", :action => "by" 

和錯誤,從雜種日誌:

Processing ApplicationController#index (for 127.0.0.1 at 2010-05-07 10:20:32) [GET] 
ActionController::RoutingError (No route matches "/find/by/ip/1.2.3.4" with {:method=>:get}): 
Rendering rescues/layout (not_found) 

如果我訪問/發現/通過/富/酒吧或/查找/由/富/ 1234我沒有問題。我懷疑問題可能是Rails根據URL中的句點推斷MIME類型,但我真的不知道如何禁用它。我試過給路由傳遞一個:defaults => {:format =>:html},但是導致Mongrel無法完全啓動。

任何幫助表示讚賞!

回答

5

Route globbing工作!現在

我的路線爲:

map.connect 'find/by/*query', :controller => "find", :action => "by" 

這使一切以下/查找/由/成陣列,則params [:查詢],每個陣列對象的一個​​URL段。對於查詢/find/by/ip/1.2.3.4,這看起來像:

["ip", "1.2.3.4"] 

這樣我就可以參考PARAMS [:查詢] [0],而params [:查詢] [1]。

如果有人有更好的辦法,請張貼它!

+0

我真的很喜歡這個解決方案。將明確問題。稍後可能會派上用場。 :)感謝你。 – 2010-05-07 11:26:05

+1

請確保在您的控制器中使用params [:query]的最佳實踐來避免SQL注入攻擊。在這種情況下,我會確保參數實際上是一個IP地址。 '需要'ipaddr'; IPAddr.new params [:query]如果參數不是IP地址,則IPAddr會引發一個'ArgumentError:invalid address'。 – scarver2 2012-10-27 12:06:27