Иногда бывает нужно использовать точки или какие-то другие специальные символы в маршрутах и параметрах маршрутов. Например, мы хотим реализовать систему которая бует отдавать файлы только пользователям которые являются владельцами этих файлов.
Создадим такой маршрут:
1
|
|
И попробуем им воспользоваться:
1
|
|
При выполнении это кода произойдет примено такая ошибка:
1 2 |
|
Это происходит потому что .jpg
интерпертируется как формат, а формата .jpg
в этом action не предусмотрено. Для исправления нужно указать что
это расширение часть параметра :file_name
. Сделать это можно
путем указания ограничения по регулярному выражение для этого параметра
включающего все символы /.+/
:
1 2 |
|
Учтите что это регулярное выражение включает все символы, и в маршруте
вида /user/1/files/pictures/coolest/some_cool_picture.jpg
в параметр :file
будет переданно значение coolest/some_cool_picture.jpg
. Если же вы не хотите
интерпретировать /
как часть параметра то этот символ надо исключить
из регулярного выражения:
1 2 |
|
В этом случае попытка построения маршурта вида:
1
|
|
будет вызывать ошибку.