I needed to do this in Rails 2, and had trouble finding any anything about how it could be done. I did eventually find some information, so I thought I’d share.

Here’s how it looked for me:

class User < ActiveRecord::Base

  has_many :attributes

  def before_destroy
    ...
  end

  def destroy_without_callbacks
    unless new_record?
      update_attribute(:deleted_at, Time.now)
    end
  end
end

Also came across an article talking about some of the downsides to soft delete. Definitely a good reminder.