2012-03-19 21 views
5

सिनात्रा मार्गों के साथ आवश्यक और वैकल्पिक पैरामीटर, मार्ग के उसी हिस्से में एक आवश्यक नाम पैरामीटर और वैकल्पिक नाम पैरामीटर दोनों कैसे हो सकते हैं।सिनात्रा मार्ग

वैकल्पिक मार्ग पैरामीटर यहाँ ठीक

get '/widgets.?:format?' 

काम करता है लेकिन, एक आवश्यक नामित पैरामीटर गठबंधन करने के लिए प्रयास करते हैं, और चीजों को तोड़ने।

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

/widgets/abc.json के लिए अनुरोध आईडी ab पैरामीटर के रूप में पूरे abc.json को पास करते हैं।

सिनात्रा संकलित regex है: "।"

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

ऐसा इसलिए है क्योंकि 'आईडी' से मेल खाने के लिए regexp लालची है, लेकिन बाकी को '?' जोड़कर उन्हें अप्रासंगिक बना दिया जाता है। कृपया [एक मुद्दा] खोलें (https://github.com/sinatra/sinatra/issues/new), मैं इसे ठीक करने में सक्षम हो सकता हूं। –

उत्तर

2

मैं इस अतीत मार्ग पर पूर्ण regex जा रहा है और बहिष्कृत करके मिला पहले रेगेक्स समूह से।

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

क्या आपने @ कॉन्स्टेंटिन के रूप में एक समस्या भी खुलती है? मैंने पहले इस तरह की समस्या में भाग लिया है (हालांकि वास्तव में सिनात्रा में नहीं) और यह जानना अच्छा होगा कि इसे सिनात्रा में तय किया गया है। – iconoclast