Быстрое решение
Иметь общий маршрут внизу маршрутов .rb. Реализуйте любую логику поиска псевдонимов, которую вы хотите, в действии, которое направляет вас.
В моей реализации у меня есть таблица, которая отображает определенные URL-адреса в контроллер, действие и хэш параметра. Я просто извлекаю их из базы данных, затем вызываю соответствующее действие и затем пытаюсь отобразить шаблон по умолчанию для этого действия. Если действие уже отрисовало что-то, то выдается ошибка DoubleRenderError, которую я ловлю и игнорирую.
Вы можете расширить эту технику так, чтобы она была настолько сложной, насколько вы хотите, хотя, поскольку она становится более сложной, имеет смысл реализовать ее, настраивая либо ваши маршруты, либо логику маршрутизации по умолчанию на Rails, а не по существу самостоятельно переопределяя всю логику маршрутизации. .
Если вы не найдете псевдоним, вы можете выбросить ошибку 404 или 500, если считаете нужным.
Что нужно иметь в виду:
Кэширование: Не зная ваших URL-адресов, априори может сделать кэширование страниц абсолютным преимуществом. Помните, что он кэшируется на основе предоставленного URI, а НЕ на url_for (:action_you_actually_executed
). Это означает, что если вы псевдоним
/foo_action/bar_method
до
/some-wonderful-alias
вы получите некий чудесный alias.html, который находится в вашем каталоге кеша. И когда вы пытаетесь пролистать панель foo, вы не будете сканировать этот файл, если не укажете его явно.
Отказоустойчивость: Убедитесь, что кто-то случайно не наложил псевдоним на существующий маршрут. Вы можете сделать это тривиально, заставив все псевдонимы в «каталоге», который, как известно, иначе не будет маршрутизируемым (в этом случае псевдоним, являющийся текстуально уникальным, достаточно, чтобы они никогда не сталкивались), но это не является максимально желательным решение для нескольких приложений, о которых я могу подумать.