On polymorphic associations with has_many through, is it possible to pull in multiple source types with one query?

When dealing with polymorphic associations, is it possible to have a has_many through query that pulls in ALL available source_types?

My understanding so far is that each source type needs its own query method, as I show here in the Image model


has_many :image_tags

has_many :tags, through: :image_tags, source: :taggable, source_type: 'Tag'

has_many :people, through: :image_tags, source: :taggable, source_type: 'Person'

has_many :businesses, through: :image_tags, source: :taggable, source_type: 'Business'



has_many :image_tags, as: :taggable

has_many :images, through: :image_tags


belongs_to :image

belongs_to :taggable, polymorphic: true

def build_taggable(params)

self.taggable = taggable_type.constantize.new(params)


What I’d like to be able to do, however, is create one query method that pulls in all associated records regardless of what source_type they might belong to.

Just thinking out loud, would that likely involve creating some sort of raw SQL join that acts directly on the ImageTags table? Or is there a more Railsy/ActiveRecordy way of approaching it?

Thank you in advance for any help or insights!


I’m not sure if you can have all that with a single AR query, I think you need a custom query (I would use a UNION query an I think AR doesn’t support that)

Thank you Ariel, I’ll look into it! Because right now I’m running each source_type query individually then concat-ing the results into a single array. Gets the job done, but it’d be nice to tackle it all in one fell swoop.