маршрутизация рельсов и параметры с '.'в них - PullRequest
6 голосов
/ 02 сентября 2011

Я использую рельсы для защиты доступа к файлам, которые должны обслуживаться только некоторыми пользователями веб-приложения. Для этого у меня есть метод контроллера, который принимает информацию о файле, к которому они хотят получить доступ, проверяет их авторизацию, а затем, если они авторизованы, использует x-sendfile для отправки их им. Концепция работает отлично, за исключением одной загадки: если они запрашивают ресурс с. в этом мой маршрут не знает, как справиться с этим. В моем файле маршрутов у меня есть:

match 'atb_resources/:guid/:resource'  => 'atb_resources#show', :as => :get_atb_resource, :via => :get

и затем, если я попробую это в моей спецификации:

get 'show', :guid => 'some_guid', :resource => 'blah.txt'

спецификация не работает с:

Failure/Error: get 'show', :guid => @atb.guid, :resource => 'blah.txt'
 ActionController::RoutingError:
   No route matches {:guid=>"ABCDEFG5", :resource=>"blah.txt", :controller=>"atb_resources", :action=>"show"}

но это нормально:

get 'show', :guid => 'some_guid', :resource => 'blahDOTtxt'

Я предполагаю, что проблема связана с моей маршрутизацией, но я не совсем понимаю, как периоды влияют на маршруты. Есть идеи?

1 Ответ

9 голосов
/ 02 сентября 2011

Для Rails 3 вы можете добавить это к вашему маршруту:

:constraints => { :resource => /.*/ }

для Rails 2 (AFAIK):

:requirements => { :resource => /.*/ }

Rails попытается интерпретировать .txt какспецификатор формата без одного из них.

...