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 | 該当処理で扱ったデータを指定します。 | ||||
