Search code examples
ruby-on-railsrubyruby-on-rails-4commentstable-relationships

Commenting "the rails way" - regarding table relationships and the rails way or tackling problems


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


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)