Forum: Ruby on Rails STI good or bad for my problem?

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
fredd (Guest)
on 2009-05-12 13:13
(Received via mailing list)
Hi. I am currently developing a small course system for student and
teachers. The system is divided in sections and sections have many
messages, comments, documents and schedules. Pretty easy to set up
using ROR, just add some belongs_to and has_many relations. But
everything becomes much more complicated when the section items
(message, comment and so on...) all has comments. And they can also be
a favorite to a users favorite list and much more. Basically all the
items has some shared generic stuff that I just don't want to copy
around. Let's check my rest routes so everyone understands better:

map.resources :sections do |sections|
  sections.resources :messages
  sections.resources :documents
  sections.resources :schedules

map.resources :items do |item|
  item.resources :comments
  item.resources :favorites

I would basically want to have a generic resource (Item) that takes
care of comments, favorites and so on. And that is what my question is
all about. Is it a good way to inherit from a base class called Items
using STI? Or could I solve this problem some other way? If I don't
have a base class I would have to nest the comment resources to each
of the items and that's not a good solution either.
David B. (Guest)
on 2009-05-12 14:00
(Received via mailing list)
STI seems not suitable, I would call that abuse, unless you have almost
everything common between yout different tables.

But you can use o polymorphic relation for comment, and extract the
behaviour in a plugin (something like acts_as_commentable)

Look here : hhttp://
fredd (Guest)
on 2009-05-12 14:58
(Received via mailing list)
Yes, I was almost thinking that my self. Thanks for clarifying that.
What I now is trying to do is to have a generic model called Item that
relates to the different items through a itemable interface
(belongs_to :itemable, polymorphic => true). And then the Item model
belongs to the Section. What do you think of that?
This topic is locked and can not be replied to.