Design Question


#1

Hi. I’m hoping someone can help me with this. (Please)

Some background. My application is to help people complete a course
(sort
of).

The course consists of different

Programs that have many
Categories that have many
Tasks

Up to there Im mostly ok. All the things listed above are set values
except
the tasks.

For each category there is a list of Tasks. This list may have 12
tasks,
with the posibility of the user making task 13 up themselves. They
choose 8
to complete.

So most of the tasks are hard coded for the program and category.

Now to the question…

How do I allow a user to make up task 13?

Where do I keep the information for the tasks selected, and also one
record
per task that collected some information about it for that user?

I’m not even sure how to design the database with this one…

I would love any help anyone could give me.

Cheers
Dan


#2

can you post the db schema and models that you have so far?


#3

I’m sorry I can’t… I’m not sure even where to start.

The programs, categories, and most of the tasks are entered into the db
by
the admin. Users don’t have to worry about them, just be able to select
them and have them assigned to them with some other information.

They do have to be able to enter task 13 that is associated with them
and a
cateogy.

I’m not even sure what method I would put onto the user to find their
tasks. Maybe something like

@user.program(‘SomeProgram’).category(‘someCategory’).tasks.each do
something

Just to try a different angle.

I have a set list of items (sort of) that are assigned to many people to
complete. Each list has a number of items to complete. ie. any 6 to
complete. The user can then select which items from that list that they
want to complete. Each person can have their own individual attributes
assiged to each item( ie comments, dates etc). Each list belongs to a
category, and may have one user defined item in it along with the set
items
depending on the program and category the list is in. This is all part
of a
program. Different programs can have categories that are named the same
as
categories in other programs, but has it’s own list items.

I am totally lost on how to implement this.


#4

How about implementing it without the 13th task and then see where the
13th
task will fit into the schema?

Peter


#5

I’ll try to give an example… This is trying to go from a manual
system
that is not managed very well at all at the moment.

A user may be enrolled in

Programming 101 (Program Level)

The user is then required to select (categories are not optional)

OO (Category) (Select 2)
(The task list)

  1. Identify What obejects are and write a bit about them
  2. Complete a class definition
  3. Think of 5 ways to use an object in a sentence.
  4. Make up your own task to show you know what’s going on

Rails (Category)(Select 4)
(the task list)

  1. Identify the rules for table and field pluralisation in rails
  2. Write a simple todo app
  3. Identify what a plugin is
  4. Use a plugin in a sample app
  5. Use a file upload in a sample app
  6. Use a generator
  7. Make up your own task to show you know what’s going on

Web Servers (Category) (Select 3)

  1. What does a web server do?
  2. Install your own web server and enable rails on it
  3. Identify 10 security issues that you should prevent on your server.

Each of these tasks will then have a todo list associated with them for
that
user. I don’t really have a probelm with that part. Just the above…

How do I have a set list of things for ppl to do, and then store their
responses? (as well as the “make up your own tasks”)

Thanx for helping…


#6

OK… if you can’t post a sample schema, how about a concrete example of
a user,
in a program with multiple categories and tasks? Doesn’t need to be
fancy, or
even real data, just a sample of what the existing system looks like.

Is this data being managed at the moment? Are there any clues in the
current
system for how a given set of data lives, or is associated? Particularly
to a user.

It also might be a better idea to tackle this problem bottom-up, rather
than
top-down. Figure out how you need to represent the tasks and then put
categories
on top of that, and then put programs on top of that…

-Brian


#7

It looks like what is important is linking students to tasks with
has_and_belongs_to_many

CREATE TABLE students_tasks …

It looks like you will have models for Program, Category, Task, and
Student.

In the Program model, you could have a class method that receives a
student
and checks that the student has satisfied the requirements of each
Category
and therefore the program. if each category returns true then this
method
returns true

In the Category model, a class method that receives a student and checks
that the student has satified all the requirements of the Category.

In the Student model, have an instance method in that calls Program’s
class
method I mentioned above.

Maybe that is good or maybe it is just drivel I typed. But I hope it
helps.

Peter


#8

Thanx Peter,

That sounds like it should work…

Just one more question though.

Where do I store the answers to the tasks though. The tasks need an
entry
in the db to say what they are (lets me print out the questions). Then
each
student needs to log in and provide an answer to each task/question.
Where
does that go?

Cheers


#9

On 11/29/05, Liquid removed_email_address@domain.invalid wrote:

does that go?
What is an answer to a task? Is a task a question or something that must
be
completed? I think if it is a question then the answer goes in the
students_tasks table as an extra feild. That way the answer for a
particular
student and a particular task is identifiable.


#10

Thanx everyone for your help… I think I should be able to get it to
work.

Cheers