Comment
- id
- author_id
- body
- commentable_type (Article, Post, ...)
- commentable_id
- is_hidden (скрывать, если модератор или автор удалил)
t.references :commentable, polymorphic: true
Like
- id
- author_id
- likeable_type (Article, Post, Comment, ...)
- likeable_id
- points (+1,-1)
Удалять лайки не нужно. Собирать все +1 и -1 вместе и затем считать их сумму. Подсчёт лайков не обязан быть моментальным и точным 100%.
Когда срабатывает коллбэк after_update, не обновлять сразу, а отправлять событие в очередь. Воркер подхватит событие и обработает его. Проверять время последнего обновления и если превысило, скажем, 1 минуту (чтобы не нагружать СУБД), обновить счёт.
Таблицу уведомлений - по аналогии с comments.