Skip to content

Instantly share code, notes, and snippets.

@seancdavis
Last active January 12, 2022 14:06
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save seancdavis/e76e6649267655ebc461 to your computer and use it in GitHub Desktop.
Save seancdavis/e76e6649267655ebc461 to your computer and use it in GitHub Desktop.
Rails has_many :through Polymorphic Association (http://goo.gl/lxmehk)
# app/models/image.rb
class Image < ActiveRecord::Base
has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings
end
# app/models/post.rb
class Post < ActiveRecord::Base
has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings
end
# app/models/tag.rb
class Tag < ActiveRecord::Base
has_many :taggings
has_many :posts, :through => :taggings, :source => :taggable,
:source_type => 'Post'
has_many :images, :through => :taggings, :source => :taggable,
:source_type => 'Image'
end
# app/models/tagging.rb
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :taggable, :polymorphic => true
end
@amitsaxena
Copy link

I don't think a straightforward solution for this exists. Probably I'll need to change the database schema to account for this.

@devanmoylan
Copy link

Nice work and thank you for posting. I'm curious, what's the tagging migration and schema look like?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment