Git Product home page Git Product logo

ruby-objects-has-many-through-lab-notredame-se-ds-preview's Introduction

Ruby Object Relations: Has-Many-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 Artist class needs a class variable @@all that begins as an empty array
  • The Artist class needs a class method .all that lists each artist in the class variable
  • An artist is initialized with a name and is saved in the @@all array.
  • The Artist class 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 Artist class needs an instance method, #songs, that iterates through all songs and finds the songs that belong to that artist. Try using select to achieve this.
  • The Artist class needs an instance method, #genres that iterates over that artist's songs and collects the genre of each song.
madonna = Artist.new("Madonna")

The Genre model:

  • The Genre class needs a class variable @@all that begins as an empty array.
  • The Genre class needs a class method .all that lists each genre in the class variable.
  • A genre should be initialized with a name and be saved in the @@all array.
  • The Genre class needs an instance method, #songs, that iterates through all songs and finds the songs that belong to that genre.
  • The Genre class 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.

pop = Genre.new("pop")

The Song model:

  • The Song class needs a class variable @@all that begins as an empty array.
  • The Song class needs a class method .all that 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 @@all array.
madonna = Artist.new("Madonna")
pop = Genre.new("pop")

into_the_groove = Song.new("Into the Groove", madonna, pop)

The Doctor model:

  • The Doctor class needs a class variable @@all that begins as an empty array.
  • The Doctor class needs a class method .all that lists each doctor in the class variable.
  • A doctor should be initialized with a name and be saved in the @@all array.
  • The Doctor class needs an instance method, #new_appointment, that takes in a an instance of the Patient class and a date, and creates a new Appointment. That Appointment should know that it belongs to the doctor
  • The Doctor class needs an instance method, #appointments, that iterates through all Appointments and finds those belonging to this doctor.
  • The Doctor class needs an instance method, #patients, that iterates over that doctor's Appointments and collects the patient that belongs to each Appointments.
doogie = Doctor.new("Doogie Howser")

The Patient model:

  • The Patient class needs a class variable @@all that begins as an empty array.
  • The Patient class needs a class method .all that lists each patient in the class variable.
  • A patient is instantiated with a name and be saved in the @@all array.
  • The Patient class needs an instance method, #new_appointment, that takes in an argument of a doctor and a date and creates a new Appointment. The Appointment should know that it belongs to the patient.
  • The Patient class needs an instance method, #appointments, that iterates through the Appointments array and returns Appointments that belong to the patient.
  • The Patient class needs an instance method, #doctors, that iterates over that patient's Appointments and collects the doctor that belongs to each Appointment.
ferris = Patient.new("Ferris Bueller")

The Appointment model:

  • The Appointment class needs a class variable @@all that begins as an empty array.
  • The Appointment class needs a class method .all that lists each Appointment in the class variable.
  • An Appointment should be initialized with a date (as a string, like "Monday, August 1st"), a patient, and a doctor. The Appointment should be saved in the @@all array.
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.

ruby-objects-has-many-through-lab-notredame-se-ds-preview's People

Contributors

annjohn avatar aviflombaum avatar danielseehausen avatar drakeltheryuujin avatar ga-be avatar geluso avatar hoffm386 avatar jmburges avatar kkterai avatar maxwellbenton avatar pletcher avatar sgharms avatar sophiedebenedetto avatar telegraham avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.