Rails Associations, habtm? Polymorphic? Both?
Asked Answered
M

1

5

In my Rails app I have three models, Projects, BlogPosts and Images. Projects and BlogPosts can have many linked images and an image can be linked to a Project, a BlogPost or both.

What is the best way of setting up the associations to make this work in Rails?

Microsome answered 2/11, 2008 at 23:46 Comment(0)
S
9

I'd tease out the habtm into a separate model class, ImageLink. Then you'd get:

Project
  has_many :image_links, :as => :resource
BlogPost
  has_many :image_links, :as => :resource
ImageLink
  belongs_to :image
  belongs_to :resource, :polymorphic => true
Image:
  has_many :image_links
Silky answered 3/11, 2008 at 0:24 Comment(2)
This is not really a "teased out" habtm, because it really is the same as a habtm (with ImageLink as the habtm-table), but the advantage of this method is that you combine two habtms into one.Cephalalgia
Thanks, I added has_many :through associations to this too, finding in the process that that doesn't work from the Image side of things, but in this case that doesn't matter as I only want to get Images linked to Projects rather than the other way round.Microsome

© 2022 - 2024 — McMap. All rights reserved.