Has Many Objects Through Lab
Objectives
Write classes that are related to each other via the "has-many-through" relationship.
Write methods that use the "has-many-through" relationship to deliver information on related objects.
Overview
In this lab, we'll be dealing with two sets of three classes.
We have a Song, Artist and Genre class. Songs belong to an artist and belong to a genre. A genre has many songs and an artist has many songs. An artist has many genres through its songs and a genre has many artists through its songs.
We also have an Appointment, Doctor and Patient class. Appointments belong to a Patient and a Doctor. A Doctor has many Appointments and a Patient has many Appointments. A Doctor has many Patients through its Appointments and a Patient has many Doctors through its Appointments.
Instructions
Start with the Artist/Song/Genre domain.
The Artist model:
The
Artistclass needs a class variable@@allthat begins as an empty arrayThe
Artistclass needs a class method.allthat lists each artist in the class variableAn artist is initialized with a name and is saved in the
@@allarray.The
Artistclass needs an instance method,#new_song, that takes in an argument of a name and genre creates a new song. That song should know that it belongs to the artist.The
Artistclass needs an instance method,#songs, that iterates through all songs and finds the songs that belong to that artist. Try usingselectto achieve this.The
Artistclass needs an instance method,#genresthat iterates over that artist's songs and collects the genre of each song.
madonna = Artist.new("Madonna")The Genre model:
The
Genreclass needs a class variable@@allthat begins as an empty array.The
Genreclass needs a class method.allthat lists each genre in the class variable.A genre should be initialized with a name and be saved in the
@@allarray.The
Genreclass needs an instance method,#songs, that iterates through all songs and finds the songs that belong to that genre.The
Genreclass needs an instance method,#artists, that iterates over the genre's collection of songs and collects the artist that owns each song.
Now let's move on to our Doctor/Appointment/Patient domain model.
The Song model:
The
Songclass needs a class variable@@allthat begins as an empty array.The
Songclass needs a class method.allthat lists each song in the class variable.A song should be initialized with a name, an artist, and a genre, and be saved in the
@@allarray.
madonna = Artist.new("Madonna")
pop = Genre.new("pop")
into_the_groove = Song.new("Into the Groove", madonna, pop)The Doctor model:
The
Doctorclass needs a class variable@@allthat begins as an empty array.The
Doctorclass needs a class method.allthat lists each doctor in the class variable.A doctor should be initialized with a name and be saved in the
@@allarray.The
Doctorclass needs an instance method,#new_appointment, that takes in a an instance of thePatientclass and a date, and creates a newAppointment. ThatAppointmentshould know that it belongs to the doctorThe
Doctorclass needs an instance method,#appointments, that iterates through allAppointments and finds those belonging to this doctor.The
Doctorclass needs an instance method,#patients, that iterates over that doctor'sAppointments and collects the patient that belongs to eachAppointments.
doogie = Doctor.new("Doogie Howser")The Patient model:
The
Patientclass needs a class variable@@allthat begins as an empty array.The
Patientclass needs a class method.allthat lists each patient in the class variable.A patient is instantiated with a name and be saved in the
@@allarray.The
Patientclass needs an instance method,#new_appointment, that takes in an argument of a doctor and a date and creates a newAppointment. TheAppointmentshould know that it belongs to the patient.The
Patientclass needs an instance method,#appointments, that iterates through theAppointments array and returnsAppointments that belong to the patient.The
Patientclass needs an instance method,#doctors, that iterates over that patient'sAppointments and collects the doctor that belongs to eachAppointment.
ferris = Patient.new("Ferris Bueller")The Appointment model:
The
Appointmentclass needs a class variable@@allthat begins as an empty array.The
Appointmentclass needs a class method.allthat lists eachAppointmentin the class variable.An
Appointmentshould be initialized with a date (as a string, like"Monday, August 1st"), a patient, and a doctor. TheAppointmentshould be saved in the@@allarray.
ferris = Patient.new("Ferris Bueller")
doogie = Doctor.new("Doogie Howser")
new_appointment = Appointment.new('January 1st, 1989', ferris, doogie)View Has Many Objects Through Lab on Learn.co and start learning to code for free.
Last updated