Non sono sicuro che sia l’ideale, ma ho usato questo codice per sostituire il contenuto del post dell’utente nei topic eliminati con "[deleted]". In questo modo è stata preservata l’esistenza dei post e mi è sembrato più sicuro rispetto alla loro distruzione completa.
# backup preliminare
deleted_topic_id = 1234
user_id = 5678
t = Topic.unscoped.find(deleted_topic_id)
ps = t.posts.select { |p| p.user_id == user_id }
# `ps.count` per verificare
ps.each do |p|
p.raw = '[deleted]'
p.save
end