# Gemfile
gem "paranoia"
# bash
rails g migration add_deleted_at_to_comments deleted_at:datetime:index
# comment.rb
class Comment < ActiveRecord::Base
acts_as_paranoid
end
# bash
rails db
sqlite> .mode column
sqlite> .headers on
sqlite> select * from comments;
# console
Comment.last.destroy
Comment.with_deleted.last.restore
Comment.last.really_destroy!
# show.html.erb
<div class='col-xs-8'>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Comments</h3>
</div>
<ul class='list-group'>
<% @user.comments.each do |comment| %>
<li class='list-group-item'>
<%= comment.content %>
<span class='pull-right'>
<%= link_to 'delete', user_comment_path(@user, comment, type: :normal), method: :delete, class: 'badge' %>
<em><%= time_ago_in_words comment.created_at %></em>
</li>
<% end %>
</ul>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Deleted Comments</h3>
</div>
<ul class='list-group'>
<% @user.comments.only_deleted.each do |comment| %>
<li class='list-group-item'>
<%= comment.content %>
<span class='pull-right'>
<%= link_to 'undelete', user_comment_path(@user, comment, type: :undelete), method: :delete, class: 'badge' %>
<%= link_to 'really delete', user_comment_path(@user, comment, type: :forever), method: :delete, class: 'badge' %>
<em><%= time_ago_in_words comment.created_at %></em>
</li>
<% end %>
</ul>
</div>
</div>
# users_controller.rb
@user = User.find(params[:user_id])
@comment = @user.comments.with_deleted.find(params[:id])
if params[:type] == 'normal'
@comment.destroy
elsif params[:type] == 'forever'
@comment.really_destroy!
elsif params[:type] == 'undelete'
@comment.restore
end