Top > 開発ガイド > コンポーネント開発逆引きリファレンス > 証跡を取得する

証跡を取得する

対象バージョン

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

概要

ユーザの操作証跡をデータベースに保存するための機能です。

使い方

基本的な使い方

1. コンポーネント情報定義ファイルに、証跡取得に関する記述を行います(証跡取得情報の定義を参照してください)。

class Xxx::ComponentInfo < RubricksComponentInfo
  def initialize
    @display_name = '[_Xxx_Title]'
    @version = '-'
    @description = '[_Xxx_Component_Description]'
    @author = '-'
    @license = '-'
    
    #証跡取得設定
    @trails = [
      {
        :record_type    => 'read',
        :examples       => '[_Xxx_Trails_ReadExample]'
      },
      {
        :record_type    => 'update',
        :examples       => '[_Xxx_Trails_UpdateExample]'
      },
    ]
  end
end


2. 証跡を取得するモデルに、acts_as_record_trailsを記述します。

acts_as_record_trails :trails_fields => {:title => 'タイトル'}, :default_methods => [:title]


3. コントローラに、証跡を取得したい箇所にrubricks_loggerを記述します。

rubricks_logger({:action_type => :update, :data => @user})

応用的な使い方

証跡として記録するカラムの指定(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!

    # :default_methodsを上書きする
    @ru.trail_methods = [:foo, :bar, :baz]
    rubricks_logger(:action_type => :update, :data => @ru)
  end
end

複数のActive Recoadオブジェクトをまとめて証跡保存する

複数のモデルが組み合わさって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
   
    # :dataに配列を指定する
    rubricks_logger(:action_type => :update, :note => '所属ユーザ変更', :data => data)
  end
end

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

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

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

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

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

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.name = 'xxxxxx'

    #auto_loggerを無効化する
    @ru.ignore_auto_logger = true
    @ru.save!
    rubricks_logger(:action_type => :update, :data => @ru)
  end
end

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

証跡取得元のメニュー名を上書きすることが可能です。

#rubricks_loggerの場合

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.name = 'xxxxxx'
    @ru.save!

    # :menu_nameでメニュー名を上書きする
    rubricks_logger(:action_type => :update, :menu_name => '一般設定', :data => @ru)
  end
end
#auto_loggerの場合

def xxx
  RubricksUser.transaction do
    @ru = RubricksUser.find(params[:id])
    @ru.name = 'xxxxxx'

    #trail_menu_nameでメニュー名を上書きする
    @ru.trail_menu_name = '一般設定'
    @ru.save!
  end
end

API

acts_as_record_trails(options)

  • 証跡取得に対応するように、モデルを拡張します。
引数必須初期値説明
options-Hashモデル拡張時のオプションです。下記「オプション」を参照してください。

オプション:

キー 必須 初期値 説明
:trails_fields - Hash 証跡として記録するデータと、その表示名との紐付けを指定します。
カラム名をkeyに、その表示名をvalueに持つHashを記述して下さい。

例) :trails_fields => {:name => 'ユーザ名', :mail => 'メールアドレス'}
:default_methods - Array 証跡として記録すべきデータを指定します。
該当クラスのインスタンスメソッドのArrayを記述して下さい。

例) :default_methods => [:name, :mail]
:auto_logger - - Hash 証跡の自動取得を行うかどうかを指定します。
指定することで、該当モデルが閲覧・作成・更新・削除された時に自動的に証跡が取得されます。
キー 必須 初期値 説明
:read - - Boolean 該当モデルの閲覧時に証跡を取得するかどうかを指定します。
この指定をすると、該当モデルの「find」が実行された時に証跡が取得されます。
:update - - Boolean 該当モデルの作成・更新・削除時に証跡を取得するかどうかを指定します。
この指定をすると、該当モデルの「create」「update」「destroy」が実行された時に証跡が取得されます。
:component_name - 'current_component.name' String(1-32) コンポーネント名を指定します。
:component_display_name - 'current_component.display_name' String(1-32) コンポーネントの表示名を指定します。

rubricks_logger(options)

  • 証跡を取得します。
引数必須初期値説明
options--Hash証跡取得のオプションです。下記「オプション」を参照してください。

オプション:

キー 必須 初期値 説明
:action_type - Symbol 処理種別を指定します。
:create
:delete
:detail
:download
:install
:list
:uninstall
:update
:upload
:note - - String 備考をフリーフォーマットで指定します。
最大長はRubricksにより付加される情報も加えて255byteです。
それ以上の値が記入されるとクリアされます。
:data - Active Recoadオブジェクト/Array 該当処理で扱ったデータを指定します。