Здравствуйте.
Делаю систему рейтинга на сайте и встал насущный вопрос, как собственно её нормально воплотить.
Дано:
User может лайкнуть комментарий, пост, и т.п.,
Как примерно выглядят модели,
User
has_many :likes
has_many :comments, through: :likes
Like
belongs_to :user
belongs_to :comment
Comment
has_many :likes
И все нормально работает, но есть одно "но". Если начать расширять функциональность лайков, например сделать возможность лакать посты, то получается запись likes будет выглядеть примерно так:
Likes.new(comment_id: nil, post_id: 1, user_id: 1)
Проблема в том, что если лайкнуть пост, то будет создана запись с пустым полем comment_id, лайкаем комментарий, создается запись без post_id. Мне то не жалко, пусть создается, но что то внутри протестует против такого беспорядка :)
Вот как избежать создания пустых записей в таблице? Какое есть лучшее решение такой проблемы?