Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

paper_trailを使ってmodelの差分を扱う

paper_trailはActiveRecordの編集差分を取ってくれるgemです。
railsのみならず、sinatraでも活用できます。

使い方

例の如くscaffoldで叩き台を生成します。

$ rails new PaperTrailTest
$ rails g scaffold Blog name:string user_id:integer

Gemfileに追記

gem 'paper_trail', '~> 3.0.0'

必要なgemを投入後、paper_tailのmodelを突っ込みます。

$ bundle install
$ bundle exec rails generate paper_trail:install

viewフォルダに_editlig.html.erbというファイルを用意し、
次のように書きます。

<hr>
<h1>Edit Log</h1>
<hr>
<h2>Events</h2>
<p>HowManyLogs ::<%= @blog.versions.size %></p>
<p>EventType ::<%= @blog.versions.last.event %></p>
<h2>Details</h2>
<% if prv = @blog.previous_version %>
<p>PreviousName ::<%= prv.name %></p>
<p>PreviousUserID ::<%= prv.user_id %></p>
<% else %>
NONE
<% end %>
<hr>

これを必要な部分で呼び出します。

<%= render 'editlog' %>

結果

起動します。エイリアスを貼っているのでコマンドで一発。

$ rails-dev-go 

項目生成直後にshowすると、次のような絵がでます。
f:id:shuzo_kino:20140213223603p:plain
これをeditでアップデートすると、detailに以前の内容が反映されます。
f:id:shuzo_kino:20140213223620p:plain