Hi, I''m currently having the situation where I have to implement a polymorphic has_and_belongs_to_many by introducing an in between model that handles all the "has_many :as" and "belongs_to :polymorphic" association implementations... and is not doing anything else. Thing I don''t like it here is, I am unnecessarily loading AR instances only to execute SQL that leads me to whatever data I want to fetch. I would then gladly remove the models, keep the DB tables, and have is all work with some kind of has_and_belongs_to_many polymorphic magic. Something like: class Song < ActiveRecord::Base has_and_belongs_to_many :genres, :as => :taggableend class Genre < ActiveRecord::Base has_and_belongs_to_many :taggables, :polymorphic => trueend or similar, I haven''t put much thought into that. I would like to hear some opinion of more experienced Rails developers to know if this would be a valuable feature. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-core/-/ZMvXmkwc88oJ. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Habtm is only good for simple relationships; you''ll want to use has_many :through, which I believe works just fine with polymorphism. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
What you are describing cannot be accomplished with a single query. The issue is that a polymorphic association requires that you query the db to determine the class of the model, and you need that information to know what table to query to get the record you want. Some SQL dbs provide some kind of recursive query that might be able to do what you want in one query, but it would be pretty complicated and I can''t guess how difficult it would be to manage the performance of those queries. That doesn''t seem like something for core. If you want many-to-many association with polymorphism in one query, one way is to use has_many :through with an STI associated model. -- Josh Susser On Saturday, September 8, 2012 at 4:30 AM, ChuckE wrote:> Hi, > I''m currently having the situation where I have to implement a polymorphic has_and_belongs_to_many by introducing an in between model that handles all the "has_many :as" and "belongs_to :polymorphic" association implementations... and is not doing anything else. Thing I don''t like it here is, I am unnecessarily loading AR instances only to execute SQL that leads me to whatever data I want to fetch. I would then gladly remove the models, keep the DB tables, and have is all work with some kind of has_and_belongs_to_many polymorphic magic. Something like: > class Song < ActiveRecord::Base has_and_belongs_to_many :genres, :as => :taggable end class Genre < ActiveRecord::Base has_and_belongs_to_many :taggables, :polymorphic => true end > > or similar, I haven''t put much thought into that. I would like to hear some opinion of more experienced Rails developers to know if this would be a valuable feature. > > > > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
On 2012-09-10, at 8:02 AM, Josh Susser wrote:> The issue is that a polymorphic association requires that you query the db to determine the class of the model, and you need that information to know what table to query to get the record you want. Some SQL dbs provide some kind of recursive query that might be able to do what you want in one query, but it would be pretty complicated and I can''t guess how difficult it would be to manage the performance of those queries.Actually, since we are only storing the model name in the DB, it simply cannot be done at all, as the model name might be different from the table name. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.