Hi all-
I'm working on a little survey app. Basically, you can write and tag questions (using acts_as_taggable_on_steroids) and it serves these question to the user in random order.
I've defined a class method that returns a random question (self.randomq in the Question model).
I've also set up a has_many :through association in the User model: has_many :answered_questions, :through => :responses, :source => :question
Now, let's say I get an array of questions through the association, like so:
u = User.find(:first) u_questions = u.answered_questions => array of Question objects q = u_questions.randomq => works! this collection can access the Question class methods.
However, if I *don't* get my collection of questions through an association, it barfs:
foo_questions = Question.find_tagged_with( "foo" ) => array of Question objects foo_questions.randomq => "no method" error. this collection can't access the Question class methods.
Why is this? It it possible for me to hack the find_tagged_with method to make this work?
Thanks a ton!
Altay
P.S. I'm guessing, but not sure, that it has something to do with collection_reader_method (in line 561 of associations.rb, see below), but I'm a little too n00b to decipher the magic:
555: def has_many(association_id, options = {}, &extension) 556: reflection = create_has_many_reflection(association_id, options, &extension) 557: 558: configure_dependency_for_has_many(reflection) 559: 560: if options[:through] 561: collection_reader_method(reflection, HasManyThroughAssociation) 562: else 563: add_multiple_associated_save_callbacks(reflection.name) 564: add_association_callbacks(reflection.name, reflection.options) 565: collection_accessor_methods(reflection, HasManyAssociation) 566: end 567: 568: add_deprecated_api_for_has_many(reflection.name) 569: end