Looks like I have found one solution.

I had 2 definitions for the classes Mcq and TrueFalse, one in separate
files named mcq.rb and true_false.rb and another definition in the
file question.rb (the abstract class itself). I had to have these
definitions in 2 files because otherwise I couldn't call the concrete
classes directly without first loading the abstract class. But that
apart, my has_many relation was not in the abstract class file. So it
was not getting loaded when I issued the find statement on the
abstract class. But if I issue the find on the concrete class directly
(without calling the abstract class before) it would've loaded the
has_many by then and would load the relations properly. Bit tricky. To
be on the safer side now I have moved all my definitions to the
abstract class file and keeping the concrete class files empty.

-subbu

On Sep 9, 10:45 pm, Subbu <[EMAIL PROTECTED]> wrote:
> This could have been solved earlier. But I couldn't find a  solution.
>
> Lets say I have an abstract base model called 'Question' and sub-
> models like Mcq, TrueFalse and FillInTheBlank. Mcq and TrueFalse
> models have a has_many relation with another model named 'Choice'
> whereas FillInTheBlank model doesn't have this. So I have defined the
> choice relation in Mcq and TrueFalse class. While instantiating the
> Mcq and TrueFalse classes in my controllers I don't know which class
> the instance is going to belong (all I know is it doesn't belong to
> FillInTheBlank). So I call it like 'Question.find(params[:id])'. Due
> to the 'type' column I get either an 'Mcq' instance or a 'TrueFalse'
> instance. Perfect. But the code breaks down when I call choices method
> on this new instance. It says "NoMethodError: undefined method
> `choices' for #<Mcq:0x3046a84>"
>
> However this problem doesn't come up if I call the find method on the
> correct class i.e. Mcq.find() directly. But as I said earlier the
> problem is I don't know whether the question is going to be a Mcq or a
> TrueFalse.
>
> One dirty solution I tried is to call find on the abstract class
> (Question.find()), get value of 'type' attribute and issue another
> find statement on the correct class (Mcq.find()). But even that didn't
> solve the problem.
>
> Has anybody faced this kind of a problem? Can someone point me in the
> right direction?
>
> Thanks much.
> subbu
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to