2010-04-08 64 views
0

在我的應用程序中,機器上有一個資源,機器和一個嵌套資源:ip。URI上帶點的參數

我希望能夠訪問IP地址的URI輸入IP地址。

的URI應該是這樣的:

/machines/m123/ips/192.168.0.1.xml 

其中,「M123」是計算機,「192.168.0.1」的名稱是機器的IPS之一。

這裏的問題是,導軌錯過理解從ip和格式的點。當我嘗試訪問該頁面時,我得到:

No route matches "/machines/m123/ips/192.168.0.1.xml" 

如果我更換點爲它的其他任何字符,女巫意味着軌道不處理的URI點。

是否有任何方法可以在路線上輸入更復雜的正則表達式以確保軌道可以按我想要的方式處理它?

我使用rails 2.3.5和ruby 1.8.7。

謝謝。

+0

你能不能想放像/machines/m123/ips/[192.168.0.1].xml的? – Kangkan 2010-04-08 13:34:38

+0

我對Rail並不熟悉,但我認爲你會看到URI處理器這個問題,'。'是URI的一個重要的分隔符,你試圖濫用它,但無意中。將其替換爲另一個字符並在代碼中解析出來。 – Lazarus 2010-04-08 13:35:32

回答

2

使用:requirements => { :param_name => pattern_regex } PARAM:

IP_PATTERN = /\A(?:25[0-5]|(?:2[0-4]|1\d|[1-9])?\d)(?:\.(?:25[0-5]|(?:2[0-4]|1\d|[1-9])?\d)){3}\z/.freeze 
map.resources :ip, :requirements => { :id => IP_PATTERN } 
+0

該模式是不正確的,但它的工作。謝謝。 – robertokl 2010-05-12 19:38:05

+0

你確定這個模式不對嗎?你能說出這個問題嗎?或者提供一個例子來證明它嗎? – clyfe 2010-05-13 10:12:36