Ruby Forum Ruby on Rails > dynamic models

Posted by jef (Guest)
on 09.05.2008 14:12
(Received via mailing list)
Hi

In my app , a user can create a set of question then a table is
dynamily created , in the database,to store the answers of the
questions. the name of the table is answers_x (x is the id of the
questionniare).

Is it possible to dynamicly create a model, to handle the answer_x
tables ?? I can't  manually  create a model then restart the server.
Posted by Ar Chron (railsdog)
on 09.05.2008 14:34
jef wrote:
> Hi
> 
> In my app , a user can create a set of question then a table is
> dynamily created , in the database,to store the answers of the
> questions. the name of the table is answers_x (x is the id of the
> questionniare).
> 
> Is it possible to dynamicly create a model, to handle the answer_x
> tables ?? I can't  manually  create a model then restart the server.

Why a different table per set of questions?

Sounds like what you need is actually are more generic models (Quizzes 
and Quizitems?) that stores lists of questions and answers.

Assuming you have a User model defined somewhere else...

User
  has_many :quizzes

Quiz
  belongs_to :user
  has_many :quizitems

Quizitem
  belongs_to :quiz

where a quizitem contains a question and an answer... maybe points if 
you're scoring them somehow.
Posted by jef (Guest)
on 09.05.2008 15:06
(Received via mailing list)
> where a quizitem contains a question and an answer... maybe points if
> you're scoring them somehow.

a question is asked to a lot of people. For a quizitem there are many
answers.

We don't know by advance the type of the answer. It may be an integer,
(what is the age of the captain) or a string (what is the name of the
captain).

It's up to the end user. He defines the quizz. and other people answer
to that quizz.
Posted by Ar Chron (railsdog)
on 09.05.2008 16:06
jef wrote:
>> where a quizitem contains a question and an answer... maybe points if
>> you're scoring them somehow.
> 
> a question is asked to a lot of people. For a quizitem there are many
> answers.
> 
> We don't know by advance the type of the answer. It may be an integer,
> (what is the age of the captain) or a string (what is the name of the
> captain).
> 
> It's up to the end user. He defines the quizz. and other people answer
> to that quizz.
Hmm... then the end user can define the expected type of the response: 
number, text, date, time, whatever.

User
  has_many :questions

Question
  belongs_to :user
  has_many :answers
  # question has a prompt, also has a 'type' for the answer. You can 
store all the answers as string, and just run a validation of an answer 
according to the expected 'type' for the response. if the expected type 
is a number, take the answer text and see if it can convert cleanly to a 
number. Perhaps a polymorphic Answer where you can have a numeric 
answer, a text answer, etc.

Answer
  belongs_to :question
  # answer has text in it
Posted by Julian Leviston (Guest)
on 09.05.2008 18:43
(Received via mailing list)
If you really do want to do this, you can do it with the eval method.

eval will execute a string as ruby code.

Julian.

Learn Ruby on Rails! Check out the FREE VIDS (for a limited time)
VIDEO #4 parts a and b now available!
http://sensei.zenunit.com/
Posted by jef (Guest)
on 13.05.2008 10:27
(Received via mailing list)
can you give me an example julian

I know that eval('puts "foo"') print the the foo string. But I don't
know how to generate a new model.
Thank you.
Posted by Nathan Esquenazi (xgamerx)
on 13.05.2008 10:48
Generating a new model for each question is not the right way to do 
this. I feel you are making things way too hard. There is no reason you 
can't just use a solution similar to what Ar Chron explained. In short, 
create a Question and Answer model. Just store the answers as string and 
the questions as strings and then store the type of the question / 
answer as well and simply cast the answer to the type. or go the 
polymorphic route and have an answer model for each possible answer 
type. Bottom line, creating arbitrary dynamic models for each question 
is simply not the path to take.