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 P. 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,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

2009/6/28 Marnen Laibow-Koser [email protected]:

way to model your data. Â Don’t discard a design based on number of

 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.

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