2012-03-19 76 views
5

使用Sinatra路由時,如何在路由的相同部分同時存在所需的命名參數和可選的命名參數。Sinatra路由的必需參數和可選參數

可選路徑參數工作正常這裏

get '/widgets.?:format?' 

但是,嘗試將需要命名放慢參數結合起來,事情打破。

get '/widgets/:id.?:format?' 

請求/widgets/abc.json傳遞整個abc.json作爲id參數。

的西納特拉編譯正則表達式是:「」

/^\/widgets\/([^\/?#]+)(?:\.|%2E)?([^\/?#]+)?$/ 
+1

這是因爲用於匹配':id'的正則表達式很貪婪,但是向其餘的添加'?'使得它們不合格。請打開[問題](https://github.com/sinatra/sinatra/issues/new),我可能會解決這個問題。 – 2012-03-21 14:48:27

回答

2

我沒有突破這個由去的路線上全面的正則表達式和排除來自第一個正則表達式組。

get %r{/widgets\/([^\/?#\.]+)(?:\.|%2E)?([^\/?#]+)?} 
+0

您是否也按@Konstantin要求提出了問題?之前我遇到過這樣的問題(雖然實際上並不在Sinatra中),並且很高興知道它已在Sinatra中得到修復。 – iconoclast 2014-10-04 15:23:36