2016-05-09 2 views
0

Я работаю над приложением с некоторыми CMS-функциями, где клиент может сопоставлять произвольные пути для своих статей.Rails: Отправить запрос на маршрутизатор

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

Я предполагаю, что для этого должно быть исключение, но я не могу понять это. Это не RoutingError.

ответ

0

Файл конфигурации: config/routes.rb выполняется при определении маршрутов вашего приложения сверху вниз. Все, что вам нужно сделать, это определить уловку в верхней части этого файла.

Я также рекомендую вам изучить какой-то Constraint (так что вы также можете кэшировать результат). Например, ваше решение может выглядеть примерно так:

# config/routes.rb 
get '*', to: 'Article#show', constraints: ArticleConstraint.new 

# lib/article_constraint.rb 
class ArticleConstraint 
    def matches? 
    # Really trivial example... You could make this better, e.g. use cacheing! 
    Article.exists?(name: request.path) 
    end 
end 
+0

Это то, что я уже делаю, но я хотел бы избежать отдельного класса ограничений и коэффициент его в контроллер, так что я сгенерирует исключение типа 'RoutingError', который получает маршрутизатор Rails для продолжения поиска. Это полезно, если у вас есть несколько контроллеров catch. –

+0

'несколько ловить всех контроллеров' - это звучит как плохая идея для меня ... Почему бы просто не проложить пробелы по маршрутам, например? '/ articles/custom-path-1','/users/custom-path-2'? –

+0

Это также позволило бы избежать конфликтов между различными контроллерами и повысить производительность приложений. –

Смежные вопросы