Вопрос

I'm looking to implement a site wide comment/message feature into my apps entities. This will enable people to comment on the following modules

Newsletters
Reports
Tasks
and user to user (messaging) 

My plan would be to make a foreign key called "entity_id" which doesn't relate to any single table. Instead, it's coupled with commentEntity_id which is a list of all the tables that can be commented on.

Example:

So a comment would have a CommentEntity which points to Reports and also an entity_id which, in this case, is the id of the Reports table.

The way I would build this is to make the following tables

 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.

This would be my solution in a PHP project, though I understand Rails requires a different way of thinking, so I would like to get the community's thoughts on this problem, and wheather this is the best way to tackle it?

Thanks

Это было полезно?

Решение

Yes, Rails supports this approach through Polymorphic associations

comment.rb

belongs_to :commentable, polymorphic: true

other models

has_many :comments, as: :commentable

Note: You have to add two columns in comments table commentable_id(Integer) and commentable_type(String)

Другие советы

you should also check out the great RailsCast regarding Polymorphic Associations d

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top