2012-03-08 5 views
6

実動レールアプリケーションから「すべてをキャッチ」または「デフォルト」ルートを削除しようとしています。私は操作の維持に興味がありますが、そのログを収集して、適切なハードコーディングされたルートに置き換えることができます。レールでのデフォルトルートのログの使用

したがって、config/routes.rbファイルに次のデフォルトルートがあります。

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

ルートがヒットするたびにログを作成または取得する方法を教えてください。このログには理想的には、このルートによって実際にパラメータとともに処理される要求のみが含まれ、ルート自体は通常通り機能する必要があります。別の可能性は、Railsのルーターconstraintsを利用することであろう

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 

答えて

7

一つの方法は、へのデフォルトルートが変更されますオプション:

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

注:ラムダマッチが成功するように真となります。

+0

あなたは素晴らしかったです。 –

+0

偉大な答えは、その機能を知りませんでした、ありがとう+1 +1 – apneadiving

+0

ちょうどアップデート。これは着信ルートを記録するために機能しますが、デフォルトルートのルート生成は一致しません(use_default_routeが渡されないため)。私は世代を可能にする最初のものの後に2番目のマッチを追加することでこれを修正しました。そして、それが使用されると、それは拾い上げられます。しかし、私の恐れは、これらの行の両方を削除すると、最終的にそれらのビューが失敗する原因になります。既定のルートも使用する生成をログに記録する方法があれば素晴らしいでしょう。 –

8

に次の関数を置く:あなたがこれを行うことができます

関連する問題