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 -- Posted via http://www.ruby-forum.com/.
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, > > GPBest, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.
2009/6/28 Marnen Laibow-Koser <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>:> > 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. >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