Dynamic Survey System

hi

i'm trying to create a web app in rails which would allow an
administrator to setup a custom survey and allow users to fill-in the
survey. Sounds simple enough but how do you create a datastore
(presumably in mySQL) when you don't know the type of each question? So
you could have 3 multiple choice questions then 1 text box followed by
a date chooser.

My thoughts are:
a) use generic types - such as text or blob and limit the number of
questions
b) generate the answers table upon completion of the the survey
structure - this then can't be edited (but unlikely to need editing
cause you can't change a survey after it's started anyway or you
wouldn't have a complete set of results).

I hope this is a generic enough question that the discussion will be
relevant to more than myself :slight_smile:

i'm trying to create a web app in rails which would allow an
administrator to setup a custom survey and allow users to fill-in the
survey. Sounds simple enough but how do you create a datastore
(presumably in mySQL) when you don't know the type of each question? So
you could have 3 multiple choice questions then 1 text box followed by
a date chooser.

My thoughts are:
a) use generic types - such as text or blob and limit the number of
questions
b) generate the answers table upon completion of the the survey
structure - this then can't be edited (but unlikely to need editing
cause you can't change a survey after it's started anyway or you
wouldn't have a complete set of results).

Think of all the various types of questions you might have...

- true/false
- multiple choice (pick one)
- multiple choice (pick any)
- free form (ie. text)
- rating (1-5, etc. which is really just multiple choice, I guess)

Then build a schema to hold all of those. Then build a schema to hold the concept of a survey, which would consist of the name of the survey, who's running it, etc. along with "links" to each of the questions built and what order to display them in. Also consider having "pages" within a survey that the questions might belong to.

-philip

thanks - that was quick.

it's funny just writing the question down helped point me in the right
direction.
Your solution seems to be what I suspected but you've elaborated and
made it much clearer - particularly hadn't thought of pages, thanks.

Philip, is your suggestion to create a single model that will
accommodate any of these response types, or to create a distinct model
for each response type? I am designing a similar system and am curious
about your thoughts.

Honestly I hadn't thought about it that far :slight_smile: THere are probably pros
and cons to each I suppose...

Some things could be made simpler if you could use STI I suppose...
certainly they could share the survey_id, page_num, etc... fields.