which design pattern will work best with AR

Hello,

I'm writing a Rails application that will track people's interests. I'd
like to keep detailed information about each type of interest so I can't
just put everything in the interest table (the table would be just too
wide)

User
  has_many :interests

Interest
  belongs_to :user
  has_many :sports
  has_many :books
  has_many :tv_shows
  etc., etc.

I was thinking that interest would have a type property that tells you
which one of the relationships will have the data.

I know about single table inheritances and polymorphic relationships but
can't figure out how to apply them to come up with an elegant solution.

Thanks,

GP

Grayson Piercee wrote:

Hello,

I'm writing a Rails application that will track people's interests. I'd
like to keep detailed information about each type of interest so I can't
just put everything in the interest table (the table would be just too
wide)

There is absolutely nothing wrong with a wide table if that's the best
way to model your data. Don't discard a design based on number of
fields alone.

User
  has_many :interests

Interest
  belongs_to :user
  has_many :sports
  has_many :books
  has_many :tv_shows
  etc., etc.

How can an Interest have many Sports? If you think about your naming
scheme, you'll see that it's telling you that a Sport *is* an Interest.
So make Interest an abstract class (with subclasses Sport, Book, and
TvShow), then either use STI or a polymorphic association to link each
Interest subclass directly to User.

[...]

Thanks,

GP

Best,

Can an individual sport, book etc belong to many users? If so then
you will need HABTM relationships between Users and Interests, if
going down Marnen's route (or between Interest and Sport if using your
original concept).

Colin

Colin