Newbie, are these associations right?

First crack at an app. I have a friend with a private school that I'm
trying to create a scheduling system for.

So I have Coordinators creating school courses. Once the course is
created the coordinator can assign multiple instructors, and then
assign students to the course and instructor. So is this right?

class Coordinator
  has_many :courses
end

class Course
  belongs_to :coordinator
  has_many :instructors
end

class Instructor
  has_many :courses
  has_many :students
end

class Student
  belongs_to :Instructor
end

Then the other thing I want to do is set a date and time for each
course. So would I create this also:

class CourseDate
  belongs_to :course
end

class CourseTime
  belongs_to :coursedate
end

Thanks in advance, Mark

You may want to consider using a :through association. The coordinator may be better defined as a role type. Within a course people have a role: coordinator or student. The relationship between people and the course is through the role. Keeping the role object will indexing on the participants in the course.

First crack at an app. I have a friend with a private school that I'm
trying to create a scheduling system for.

So I have Coordinators creating school courses. Once the course is
created the coordinator can assign multiple instructors, and then
assign students to the course and instructor. So is this right?

Are you even going to need to have students that belong to multiple
instructors? Are you going to want to know what course the student is
taking ? From the associations you've given you don't seem to be
storing that bit of information, the best you could work out is that
given their instructor there are only certain courses they could be
doing.

Then the other thing I want to do is set a date and time for each
course. So would I create this also:

class CourseDate
belongs_to :course
end

class CourseTime
belongs_to :coursedate
end

Without a full understanding of your problem (perhaps you are managing
repeating occurrences of courses etc.) this feels a little overkill to
be honest. would date/time columns on your courses table not suffice?

Fred

I think having the flexibility of having a student and or instructor assignable to different courses may come in handy. We may want to have records of past course participants. That's why a through association on a role may work out best.

Frederick,

I would want to be able to see what students are being taught be what
instructor. And yes I would want to be able to know what the course
the student is taking. So from my current setup are you saying I
wouldn't get that? Or would I get that if I used a :through
association?
I'm sort of having a tough time wrapping my head around the
associations. I read the rails guide on associations but it's not
sticking yet. Is the whole point of associations being able to make
calls to the records because of active record's built in
capabilities?

With regard to what you mentioned about CourseDate and CourseTime and
just making them additional columns. Could I still call that
information and post it to a calendar some how?

My confusion over relationships starts making me think that I should
make everything an object class. Has anyone else felt this way? Is
there a guideline for when you make something it's own class as
opposed to just making it a column in a table?

Mark

Mark,

Here are some question I would raise in designing a domain model for an app like this:

- Can students and or instructors participate and or coordinate more than one course simultaneously?
- Do you want to retain record of past participation?

The reason why I pointed out the role pattern using :through is it allows you to append extra information to the association using a mediatory model class. If the answer to these two questions is no, it's completely not needed.

FYI - The models are object classes in their own right. Everything in a Rails application is the a model if not acting upon or displaying results or searching (controller), or conveying model state (views). I tend to design applications from the model upward. I think in terms of model as the value of the application, controller as workflow, and the view agnostic of browser, API, or other. But I am coming from JEE.

Peepcode, Meet Rails 3 Part 2 in specific walks the reader through building a project management system for the DeathStar. It would be a good screencast to watch and show you how to implement your app as the sample project is similar to what you are trying to do. If you don't want to buy, suggest you download and review the sample code for the project.

Alternatively, if you can give us a little more information on your business logic, we can point you in the right direction to implement the model.

Cheers,

Rafael

Frederick,

I would want to be able to see what students are being taught be what
instructor. And yes I would want to be able to know what the course
the student is taking. So from my current setup are you saying I
wouldn't get that? Or would I get that if I used a :through
association?

It depends on the reality you are modelling. At the moment, a student
belongs_to instructor, which has_many courses - how can you extract
from that which course a student on. Is it really the case that a
student always has the same instructor, no matter what combination of
courses?

I'm sort of having a tough time wrapping my head around the
associations. I read the rails guide on associations but it's not
sticking yet. Is the whole point of associations being able to make
calls to the records because of active record's built in
capabilities?

Using associations does get you all that, but before thinking about
that I think you need to step back and think about the data you are
trying to model and what questions you will need to be able to answer.
For example with you current setup, you can't represent a student
having one instructor for their Spanish course and a different one for
their Russian literature (but only you can say whether or not this
restriction is ok).

To me if feels like you want a join model between courses and students
that defines which courses a student is taking and with which
instructor, but I don't know precisely what the reality that you are
trying to model

With regard to what you mentioned about CourseDate and CourseTime and
just making them additional columns. Could I still call that
information and post it to a calendar some how?

My confusion over relationships starts making me think that I should
make everything an object class. Has anyone else felt this way? Is
there a guideline for when you make something it's own class as
opposed to just making it a column in a table?

You haven't said what is in those tables. If they just a simple date
and a simple time column, then i don't think there's any reason. If
you're managing a more complicated schedule then it might deserve its
own table (e.g. if course date meant something like 'tuesdays and
thursdays'). Bottom line is I would ask myself for the given situation

- what data might I be duplicating
- how does this change my ability to ask (efficiently) the questions
that I want to answer (e.g. 'what courses are on today' or 'when does
this course start)

If there's no benefit to having a separate table then that suggests to
me that the things in question are more naturally just attributes.

Fred.