Inside Migrations

The easiest way to familiarize yourself with migrations is (as is often the case with Rails) to examine what Rails puts in them with script/generate. In Chapter 9 we created a students model with:

script/generate scaffold student given_name:string middle_name:string
family_name:string date_of_birth:date grade_point_average:decimal
start_date:date

That code generated many files, but the migration it created went into db/20080701211008_create_students.rb and contained the code shown in Example 10-3.

Example 10-3. Code for setting up a table, generated by a scaffolding call

class CreateStudents < ActiveRecord::Migration
  def self.up
    create_table :students do |t|
      t.string :given_name
      t.string :middle_name
      t.string :family_name
      t.date :date_of_birth
      t.decimal :grade_point_average
      t.date :start_date

      t.timestamps
    end
  end

  def self.down
    drop_table :students
  end
end

You can also generate migrations with script/generate migration migration_name. Normally, migrations that create new tables start their names with create, while migrations that add to existing tables start their names with add.

Working with Tables

Most of the activity in the migration generated by the scaffolding, shown in Example 10-1, is in the self.up method. self.down drops the whole students table, which also disposes of any contents it had, so it can skimp on details, just ordering drop_table :students. As you might suspect, drop_table just removes the table and all of its columns and data completely.

The self.up ...

Get Learning Rails: Live Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.