The Paranoia gem from the overtly talented Radar is what you'd be looking for.
It's essentially a rewrite of acts_as_paranoid (and uses many of the same conventions) but is smaller, faster and compatible with Rails 3 and 4.
It accomplishes both of your requests:
Automatically sets a deleted_at
timestamp when a destroy
method is called on an object whose class includes acts_as_paranoid
.
Automatically sets a condition on any queries that ensure deleted_at IS NULL
, unless you include with_deleted
in your query chain.
Couldn't say enough good things about the library or Radar.
Bonus: His documentation might be the best in the "business".