Top > 開発ガイド > コンポーネント開発Tips集 > 証跡取得

証跡取得

対象バージョン

当ドキュメントはRubricks-0.6.x向けです。

概要

ユーザの操作証跡をデータベースに保存するためのライブラリを提供します。

利用方法

事前準備

コンポーネントが証跡取得に対応していることをRubricksに知らせるために、コンポーネント情報定義ファイルに所定の記述が必要です。記述方法はリンク先の「証跡取得設定」を参照して下さい。

Model

証跡を取得するモデル内で下記メソッドを実装します。

acts_as_record_trails(options)
  • Options
    キー 必須 備考
    :trails_fields Hash 証跡として記録するデータと、その表示名との紐付けを指定します。カラム名をkeyに、その表示名をvalueに持つHashを記述して下さい。
    例 => {:name => 'ユーザ名', :mail => 'メールアドレス'}
    :default_methods Array 証跡として記録すべきデータを指定します。該当ClassのインスタンスメソッドのArrayを記述して下さい。
    例 => [:name, :mail]
    :auto_logger Hash 証跡の自動取得を行うかどうかを指定します。この指定をすることによって、該当モデルが閲覧・作成・更新・削除された時に自動的に証跡が取得されます。
    キー 必須 備考
    :read Boolean 該当モデルの閲覧時に証跡を取得するかどうかを指定します。この指定をすると、該当モデルの「find」が実行された時に証跡が取得されます。
    :update Boolean 該当モデルの作成・更新・削除時に証跡を取得するかどうかを指定します。この指定をすると、該当モデルの「create」「update」「destroy」が実行された時に証跡が取得されます。
    :component_name String (1-32) コンポーネント名を指定します。指定しなかった場合は'current_component.name'が記録されます。
    :component_display_name String (1-32) コンポーネントの表示名を指定します。指定しなかった場合は'current_component.display_name'が使用されます。
  • Examples
    • acts_as_record_trails :trails_fields => {:name => 'ユーザ名', :mail => 'メールアドレス'}, :default_methods => [:name, :mail]
    • acts_as_record_trails :trails_fields => {:title => 'タイトル'}, :default_methods => [:title] :auto_logger => {:read => false, :update => true}

Controller

コントローラ内の任意の箇所で下記メソッドを発効します。

rubricks_logger(options)
  • Options
    キー 必須 備考
    :action_type

    :create

    :delete

    :detail

    :download

    :install

    :list

    :uninstall

    :update

    :upload

    処理の種別を表します。
    :note String (0-255) 備考をフリーフォーマットで指定します。最大長はRubricksにより付加される情報も加えて255バイトです。それ以上の値が記入されるとクリアされます。
    :data AR Object 該当処理で扱ったデータを指定します。
    AR ObjectのArray 該当処理で扱ったデータを指定します。
  • Examples
    • rubricks_logger({:action_type => :update, :data => @user})
    • rubricks_logger({:action_type => :delete, :data => @user_list})

応用方法

証跡として記録するカラムの指定(default_methods)を上書きする

処理内容によって記録すべきデータ内容が変わる可能性があります。その際には以下のようにして「default_methods」を上書きすることが可能です。

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.foo = 'xxxxxx'
    @ru.bar = 'xxxxxx'
    @ru.baz = 'xxxxxx'
    @ru.save!
    @ru.trail_methods = [:foo, :bar, :baz]
    rubricks_logger(:action_type => :update, :data => @ru)
  end
end

複数のAR#Objectをまとめて証跡保存する

複数のモデルが組み合わさって1つのデータを形成する可能性があります。その際にはそれらを配列にしてloggerに渡すことでまとめて証跡保存することが可能です。

def xxx
  ActiveRecord::Base.transaction do
    data = []
    @rg = RubricksGroup.find(params[:id], :include => :rubricks_users)
    data << @rg
    params[:users].each do |ru_id|
      ru = RubricksUser.find(ru_id)
      @rg << ru
      data << ru
    end
    rubricks_logger(:action_type => :update, :note => '所属ユーザ変更', :data => data)
  end
end

フリーフォーマットで証跡保存する

モデルの結合等が複雑なためフリーフォーマットでデータ内容を記述したい場合は、Hashを用いることでフリーフォーマットで証跡保存することが可能です。

def xxx
  ActiveRecord::Base.transaction do
    .
    .
    .
    rubricks_logger(:action_type => :upload, :note => 'アドレス帳インポート', :data => {'名前' => 'foo', 'メールアドレス' => 'foo@example.com'})
  end
end

特定の処理で自動取得を無効にする

ある特定の処理においてauto_loggerによる自動取得ではなくrubricks_loggerによって手動で証跡を保存したい場合は、該当オブジェクトにフラグを立てることで自動取得を無効にすることが可能です。

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.name = 'xxxxxx'
    @ru.ignore_auto_logger = true
    @ru.save!
    rubricks_logger(:action_type => :update, :data => @ru)
  end
end

証跡取得元のメニュー名を上書きする

(利用する場面が思いつきませんが)証跡取得元のメニュー名を上書きすることが可能です。

auto_loggerの場合

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.name = 'xxxxxx'
    @ru.trail_menu_name = '一般設定'
    @ru.save!
  end
end

rubricks_loggerの場合

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.name = 'xxxxxx'
    @ru.save!
    rubricks_logger(:action_type => :update, :menu_name => '一般設定', :data => @ru)
  end
end