- Create a table using ActiveRecord.
- Use Active Record's querying methods.
In this lab, we'll be working in a TV show domain. We have a TV show model, the
Show
class, and a shows
table that you'll create in your database.
You'll be required not only to write a migration that creates a shows
table
and gives the Show
class certain attributes, but also to use Active Record's
querying methods.
Active Record makes it easy to ask our database for certain information and
datasets by providing a bunch of built-in methods for us. For example, we can
request the sum of all of the values of a particular column with the #sum
method:
ClassName.sum(:column_name)
We can query our database based on certain conditions using the #where
method.
Let's say we have a Song
class and table and each song has a number_of_stars
rating attribute. We could query for songs with more than 3 stars like this:
Song.where("number_of_stars > ?", 3)
Let's look at one more example: Let's say we want to query our database for the
lowest value in the number_of_stars
column, i.e., the lowest rating that any
song has:
Song.minimum(:number_of_stars)
You'll be writing methods that rely on Active Record methods like #minimum
,
#sum
, and #where
to get these tests passing.
Use the following resources to help you find the Active Record query methods that will help you pass these tests:
-
Run
mkdir db
and thenmkdir db/migrate
to create themigrate
folder withindb
. Then create a file in thedb/migrate
folder called001_create_shows.rb
. In this file, write the migration code to create ashows
table. The table should havename
,network
,day
, andrating
columns.name
,network
, andday
have a datatype of string, andrating
has a datatype of integer. -
Create an
app
folder with amodels
folder within it, and then create a file,show.rb
, inapp/models
. In this file, you will define aShow
class that inherits fromActiveRecord::Base
. -
Now we need to create a second migration to add another column to our
shows
table. In thedb/migrate
folder, create another file,002_add_season_to_shows.rb
, and write a migration to add a column,season
, to theshows
table. The datatype of this column is string.
Note: This lab is using ActiveRecord 5.2. You will need to specify this
version in your migrations by having your classes inherit from
ActiveRecord::Migration[5.2]
.
You'll be defining the following methods:
-
highest_rating
: this method should return the highest value in the ratings column. hint: if there is aminimum
Active Record method, might there be amaximum
method? -
most_popular_show
: this method should return the show with the highest rating. hint: use thehighest_rating
method as a helper method. -
lowest_rating
: returns the lowest value in the ratings column. -
least_popular_show
: returns the show with the lowest rating. -
ratings_sum
: returns the sum of all of the ratings. -
popular_shows
: returns an array of all of the shows that have a rating greater than5
. hint: use thewhere
Active Record method. -
shows_by_alphabetical_order
: returns an array of all of the shows sorted in alphabetical order according to their names. hint: use theorder
Active Record method.