使用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 %>