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
