NOTE / Ruby-On-Rails

使用paper_trail完整的版本控管

使用Gemfile安裝paper_trail

gem 'paper_trail'

paper_trail所需的安裝設定

bundle exec rails generate paper_trail:install --with-changes
bundle exec rake db:migrate

接下來只要在要使用版本控管的Model 裡面加上has_paper_trail即可完成

class People < ActiveRecord::Base
  has_paper_trail
end

這樣就完成了,所有的修改和刪除,都會紀錄在 paper_trail 的 Version model 裡面。 如果要在畫面上查看以及復原歷史紀錄

def index
  @versions = PaperTrail::Version.order("id DESC").page(params[:page])
end

def undo
  @version = PaperTrail::Version.find(params[:version_id])
  @version.reify.save!
  redirect_to admin_versions_path
end

像這樣使用分頁功能以及使用復原功能

<% @versions.each do |version| %>
<tr>
<td><%= version.id %></td>
<td><%= version.item_type %></td>
<td><%= version.item_id %></td>
<td><%= version.event %></td>
<td>
<ul>
<% version.changeset.each do |key, value| %>
<li><%= value[0] %> 改成 <%= value[1] %></li>
<% end %>
</ul>
</td>
<td><%= version.whodunnit && User.find(version.whodunnit).display_name %></td>
<td>
<% if version.event != 'create' %>
<%= link_to "Undo", admin_version_undo_path(version), :data => { :confirm => "Are you sure?"}, :method =>:post, class: "btn btn-danger" %>
<% end %>
</td>
</tr>
<% end %>
<%= paginate @versions %>

REFERENCE / 1

Loading