2012-03-08 3 views
6

Я пытаюсь удалить маршрут «поймать все» или «по умолчанию» из приложения производственных рельсов. Я заинтересован в поддержании работы при сборе журнала его использования, чтобы я мог заменить его на соответствующие жестко закодированные маршруты.Использовать маршрут по умолчанию в рельсах

Итак, учитывая, что у меня есть следующая строка маршрута по умолчанию в моем файле config/routes.rb.

match '/:controller(/:action(/:id))' 

Как я могу создать или получить журнал каждый раз, когда этот маршрут попадает. Этот журнал в идеале должен включать только запросы, фактически обработанные этим маршрутом вместе с параметрами, и ему нужно будет оставить маршрут сам по себе нормальным.

ответ

7

Один из способов сделать это изменение маршрута по умолчанию для:

match ':controller(/:action(/:id))(.:format)', :using_default_route => true 

Затем поместите следующую функцию в app/controllers/application_controller.rb

before_filter do 
    if params[:using_default_route] 
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}") 
    end 
end 
+0

Ты блестящий добрый сэр. –

+0

отличный ответ, не знал, что функция, спасибо и +1 – apneadiving

+0

Просто обновление. Хотя это работает для регистрации входящих маршрутов, это приводит к тому, что генерация маршрута для маршрута по умолчанию не соответствует (поскольку параметр use_default_route не передается). Я исправил это, добавив второе совпадение после первого, которое позволит генерировать, и его существование будет поднято, если оно будет использовано. Тем не менее, мой страх устраняет обе эти линии, в конечном итоге приведет к сбою этих просмотров. Было бы здорово, если бы был способ генерации журнала, который также использует маршрут по умолчанию. –

8

Другой возможностью было бы использовать Rails маршрутизатор constraints опция:

match '/:controller(/:action(/:id))', constraints: -> (req) { 
    Rails.logger.info("Default route used: #{req.path.inspect}") 
    true 
} 

Примечание: лямбда-ре поворачивается так, чтобы совпадение было успешным.

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