2012-09-29

ActiveRecordの変更履歴を保存するにはpaper_trailがよさげ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前、rails2.3の時はActiveRecordでデータの履歴管理をするというエントリで
vestal_versions
がよさげとしていましたが、どうやら今は、
paper_trail
が人気な気配です。

https://www.ruby-toolbox.com/categories/Active_Record_Versioning
にいろいろな履歴管理のものが紹介されています。

ちなみに
paper_trail
を利用するには以下のような感じです。

Gemfileに以下を追加してbundle installします。
gem 'paper_trail', '~> 2'

そして
rails g paper_trail:install --with-changes
とします。するとversionsという履歴管理用のテーブルのmigrationが作成されます。
ちなみに--with-changesとつけるとchangesetというカラムに変更された場所だけ記録することができるようになります。

そして
rake db:migrate
します。

履歴を残したいmodelに以下のようにすると履歴情報が残せるようになります。
class Blog < ActiveRecord::Base
  has_paper_trail
end

履歴情報は以下のような感じで取得できます。

すべての変更履歴情報を取得
blog.versions

最新の変更履歴情報を取得
blog.versions.last

変更前の情報を取得
blog.versions.last.reify

変更した部分だけの情報の取得
blog.versions.last.changeset
これで
{'article' => ['変更前', '変更後']}
みたいな形で取得できます。

結構他にもいろいろなことができそうです。
詳しくは以下を見てみてください。
https://github.com/airblade/paper_trail

コメントを投稿