#19 Deleting and Undeleting with Paranoia

Summary

When your app is using Paranoia, calling destroy on an ActiveRecord object doesn't actually destroy the database record, but just hides it.
rails view model 7:34

Summary

Gemfilegem "paranoia"
bashrails 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