概要
複数のコントローラーで利用する共有フィルタを作成する
内容
複数のコントローラーで利用する共有フィルタを作成します。
任意のフィルタ用クラスを実装し、
before,after,filterのどれかのメソッドを実装します。
それぞれ
before_action,after_action,around_actionに対応します。
サンプル
コントローラーの呼び出し前後にLTSV形式のロギング機能を追加します。
Filter用クラス
app/controller/concerns/controller_trace_log_filter
class ControllerTraceLogFilter def filter(c, &action) class_name = "#{c.params[:controller].capitalize}Controller" method_name = c.params[:action] login = c.current_user.login if c.current_user start_time = Time.now_msec trace_start = {se_flg: "start", user: login, class_name: class_name, method_name: method_name, total_time: "", params: c.params} c.logger.debug trace_start yield end_time = Time.now_msec trace_end = {se_flg: "end", user: login, class_name: class_name, method_name: method_name, total_time: "#{(end_time - start_time).to_s} msec", params: ""} c.logger.debug trace_end end end
application_controller.rbから自作フィルタの呼び出しを指定
class ApplicationController < ActionController::Base # 略 around_action ControllerTraceLogFilter.new # 略 end