Я использую область действия для определения локали, а также для того, чтобы мои маршруты вызывались без локали, проблема у меня заключается в том, что без указания локали маршруты думают, какой бы ни был первый элемент пути сейчас язык Мне интересно, как я могу ограничить это, пока не требуя локали для моих названных маршрутов? Я делаю это, чтобы отремонтировать веб-сайт и хочу перехватить старые ссылки и перенести их на старую страницу, вложенную в новый макет.
Вот что я делаю:
scope "(:locale)", :locale => /en|es/ do
match 'named_route\:id'
end
Интересно, есть ли способ использовать лямбу, чтобы гарантировать, что у меня есть двухсимвольная локаль, а если не обойти сферу? Я думаю, что это может быть невозможно, потому что мои маршруты доступны без локали, и я должен был бы проверить, было ли это возможным совпадением для любых маршрутов ниже, что не было бы слишком сложно.
То, что я спрашиваю, это то, можно ли использовать лямбу для проверки локали по множеству возможностей? Т.е. «Локаль находится в [ru, es, events, pages и т. д.], затем введите область действия». Это будет означать, что если у него есть языковой стандарт или если он возможно существует внутри именованных маршрутов, он войдет в область действия, в противном случае он избежит области действия, и я могу проверить свою таблицу 302, прежде чем отобразить 404, если страница никогда не существовала. 1008 *
Надеюсь, это имеет смысл.
EDIT:
Хорошо, пока я придумала решение, которое работает, но оно не очень элегантно.
Поскольку в контроллере приложения у меня есть before_filter для установки локали на локаль по умолчанию, если она не определена, я просто переместил свой корневой маршрут в конец области, и внутри моего корневого метода я проверяю, что локаль находится в одной из Локальные, которые я обслуживаю, если это, установите локаль в мою локаль по умолчанию и вызовите мою функцию catch_all.
Это работает так, как будто я захожу на mysite / no_route_for_this, оно устанавливает мою локаль на: no_route_for_this и вызывает мой корневой маршрут.
Хотя здесь было бы идеально более элегантное решение.