Обязательные и дополнительные параметры маршрута Синатра - PullRequest
5 голосов
/ 19 марта 2012

С маршрутами Синатры, как может быть как обязательный именованный параметр, так и необязательный именованный параметр в одной и той же части маршрута.

Опциональный параметр маршрута отлично работает здесь

get '/widgets.?:format?'

Но попробуйте объединить требуемый именованный параметр, и все обернется.

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

Запросы для /widgets/abc.json передают весь abc.json в качестве параметра id.

Синатраскомпилированное регулярное выражение:

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

1 Ответ

2 голосов
/ 22 марта 2012

Я справился с этим, выполнив полное регулярное выражение на маршруте и исключив "." из первой группы регулярных выражений.

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