2014-09-20 88 views
0
match '/main/*params', to: 'main#parse', :constraints => {:url => /.*/}, as: 'parser', via: 'get' 

params將與/p1/p2/p3/p4/調用。路線Globbing與參數包含斜槓

如何更改路線定義以省去一個參數/p1//p3/p4/ 並且仍然有params包含輸入參數(/p1//p3/p4/)。現在params = p1/p3/p4/刪除了一個正斜槓。

控制器:

def parse 
    p = params[:params].split("/") 
    ... 
end 

回答

0

這是你的 '通用' 路線:

/.*/ 

這應該匹配不僅/ P1/P2/P3/P4,但任何數量的參數

您可以嘗試在您的通用之前聲明一個路徑,並指定您想要的參數數量:

/:parameter1/:parameter2/:parameter3 

這樣,/ p1/p2/p4將匹配第二條路線並在匹配通用路線之前離開。類似地,/ p1/p2/p3/p4會跳過3個參數路由,但屬於通用路由。

+0

我想避免這種情況。想象一下編號路線需要考慮空參數的每個排列。這就是爲什麼我想定義一條路徑來解決任何可能性,然後在我的控制器中解析斜線。 – 2014-09-21 10:46:05

+0

我明白了。你能提供處理參數的控制器代碼嗎?這就是你需要改變的地方。在我看到我可以相應地更新我的答案後。 – 2014-09-21 16:13:10

+0

我將操作添加到了我的問題中。然而,參數到達控制器,參數被刪除。所以'//'變成'/' – 2014-09-21 23:04:40