I am using polymorphic associations to track Comments in my project. All very straight forward stuff.
The problem I have is in querying based on the polymorphic association and joining from the Comment model back to it's owner.
I have a Comment model
class Comment < ActiveRecord::Base belongs_to :commentable, :polymorphic => true end
And a ForumTopics mode:
class ForumTopic < ActiveRecord::Base has_many :comments, :as => :commentable end
I have several other "commentable" models that aren't important right now.
All of this works.
What I am trying to do is find all of the Comments that belong to a ForumTopic with a specified condition (in this case, 'featured' == true).
When I try and use a finder to join the models:
@comments = Comment.find(:all :joins => :commentable :conditions => ["forum_topics.featured = ? ", true] )
I receive the following error:
Can not eagerly load the polymorphic association :commentable
Using the AR "include syntax":
@comments = Comment.find(:all :include => :forum_topics :conditions => ["forum_topics.featured = ? ", true] )
Association named 'forum_topics' was not found; perhaps you misspelled it?
If I try and join with a table name instead of the association name (string instead of symbol):
@comments = Comment.find(:all, :joins => "forum_topics", :conditions => ["forum_topics.featured = ? ", true] )
Mysql::Error: Unknown table 'comments': SELECT comments. FROM comments forum_topics WHERE (forum_topics.featured = 1 )*
(You can see here that the syntax of the underlying query is totally off and the join is missing altogether).
Not sure if what I am doing is even possible, and there are other ways to achieve the required result but it seems like it should be doable.
Anything I am missing?