Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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