Creating A Migration
Goals
Create a simple Table in the database for topics with a title and a description
Automatically generate the corresponding Scaffold in Rails (namely, the Model, the View, and the Controller).
Topics |
---|
id |
title |
description |
The suggestotron has a list of topics that people can vote on. We'll store our topics in the database. In this step you'll do the following:
Steps
Step 1
Type this in the terminal:
Terminalrails generate scaffold topic title:string description:text
generate scaffold
tells Rails to create everything necessary to get up and running with topics.topic
tells Rails the name of the new model.title:string
says that topics have a title, which is a "string".description:text
says that topics have a description which is a "text". A "text" is like a "string" that might be very long.If you want, take some time to poke around the files listed in this step. You can learn about them in the Rails Architecture page.
Step 2
Type this in the terminal:
Terminalrails db:migrateThis tells Rails to update the database to include a table for our new model.
Explanation
Databases don't create tables by themselves - they need instructions.
One of the files the scaffold command created will be named something like
db/migrate/20170802211140_create_topics.rb
. The numbers in the name are the date and time the file was made, so yours will be named differently.The file contains Ruby code that describes what the table will look like. This is called a migration file. It tells the database how to transform itself into the new configuration.
class CreateTopics < ActiveRecord::Migration[5.1] def change create_table :topics do |t| t.string :title t.text :description t.timestamps end end endSee how this lines up with the scaffold command?
rails generate scaffold topic title:string description:textThe migration says to create a table named "topics", with a title column that's a string, and a description column that's text. Rails automatically adds timestamps, and will use it to automatically record when the data was created and updated.
Rake tasks
rake (ruby make) is a tool that allows you to run small Ruby programs (tasks) that you use often in your application.
Here,
rails db:migrate
uses a Rake task provided by the Rails framework. It uses the migration file we just created (db/migrate/201xxxxxxxxxxx_create_topics.rb
) to change the database. Database migration files can be crucial to code collaboration.In previous versions of Ruby on Rails, this command would have been run like so:
rake db:migrate
. Since many developers found it confusing to have some commands run withrails
(rails generate
,rails server
) and some withrake
(rake db:migrate
,rake -T
) they were consolidated. Rake still exists outside of Rails and you may see it from time to time.You can run
rails -T
to see a list of all the Rake tasks your app currently responds to, along with a short description of each task.
Next Step:
Go on to CRUD With Scaffolding