Комментирование "пути рельсов" - относительно отношений за столом и пути рельсов или решения проблем

Я планирую внедрить в свои приложения приложения функцию комментариев / сообщений. Это позволит людям комментировать следующие модули

Newsletters
Reports
Tasks
and user to user (messaging) 

Мой план состоял бы в том, чтобы сделать внешний ключ с именем "entity_id", который не относится ни к одной отдельной таблице. Вместо этого он связан с commentEntity_id, который представляет собой список всех таблиц, которые можно комментировать.

Пример:

Таким образом, комментарий будет иметь CommentEntity, который указывает на отчеты, а также entity_id, который в данном случае является идентификатором таблицы Reports.

Я бы построил это так, чтобы сделать следующие таблицы

 Comment #along with user_id and a comment body:string, this will also have a commentEntity_id and a entity_id 

 CommentInvolvement # simply everyone involved (either by commenting on the entity, or in the case of user to user, **being** the entity)

 CommentEntity # This is the join between the comment and the place
 it's put.

Это было бы моим решением в проекте PHP, хотя я понимаю, что Rails требует иного мышления, поэтому я хотел бы узнать мнение сообщества по этой проблеме, и будет ли это лучшим способом ее решения?

Спасибо

2 ответа

Решение

Да, Rails поддерживает этот подход через полиморфные ассоциации

comment.rb

belongs_to :commentable, polymorphic: true

другие модели

has_many :comments, as: :commentable

Примечание. Вам необходимо добавить два столбца в таблицу комментариев. commentable_id(Целое число) и commentable_type(String)

Вы также должны проверить большой RailsCast относительно полиморфных ассоциаций d

Другие вопросы по тегам