理想的かどうかはわかりませんが、削除されたトピックのユーザー投稿内容を "[deleted]" に置き換えるためにこのコードを使用しました。これにより、投稿の存在は保たれ、完全に削除するよりも安全だと考えました。
# まずバックアップ
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` で確認
ps.each do |p|
p.raw = '[deleted]'
p.save
end