Иногда бывает нужно использовать точки или какие-то другие специальные символы в маршрутах и параметрах маршрутов. Например, мы хотим реализовать систему которая бует отдавать файлы только пользователям которые являются владельцами этих файлов.
Создадим такой маршрут:
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
| |
будет вызывать ошибку.