2012-03-19 14 views
5

Sinatraルートでは、ルートの同じ部分に、必要な名前付きパラメータとオプションの名前付きパラメータの両方を含めることができます。Sinatraルートの必須パラメータとオプションパラメータ

オプションのルートパラメータが

get '/widgets.?:format?' 

ここで正常に動作します。しかし、必要な名前のPARAMTERを組み合わせてみてください、と物事が壊れます。

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

/widgets/abc.jsonに対するリクエストは、abc.json全体をidパラメータとして渡します。

シナトラコンパイル正規表現は次のとおりです。

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

これは、 ':id'と一致する正規表現が欲しいものですが、残りの部分に'? 'を追加すると、それらは不合理になります。 [問題](https://github.com/sinatra/sinatra/issues/new)を開いてください。これを修正できる可能性があります。 –

答えて

2

私はルート上の完全な正規表現を予定して除外することで、この過去の手に入れました「」最初の正規表現グループから。

+0

@コンスタンチンがリクエストした問題も開いていますか?私はこの種の問題に遭遇しましたが(Sinatraでは実際にそうではありませんでしたが)、それはSinatraで修正されていることを知っておくと良いでしょう。 – iconoclast

関連する問題