Question

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

Était-ce utile?

La solution

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)

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top