{memo: :rails3, command: :rails_generate_migration}

I checked with Rails 3.0.5 - 3.0.7

reference

Ruby on Rails API

create table

$ r g scaffold diary shop:string date_on:date
     invoke  active_record
      create    db/migrate/20110418065125_create_diaries.rb
      ...
      create    public/stylesheets/scaffold.css

add column with table

rails console
$ r c
Loading development environment (Rails 3.0.6)
ruby-1.9.2-p136 :001 > Diary
 => Diary(id: integer, shop: string, date_on: date, created_at: datetime, updated_at: datetime)
rails generate migration Add#{add_column_name}To#{added_table_name} column_name:type
$ r g migration AddAddressToDiary address:string
      invoke  active_record
      create    db/migrate/20110418122704_add_address_to_diary.rb
$ r c
ruby-1.9.2-p136 :001 > Diary
 => Diary(id: integer, shop: string, date_on: date, created_at: datetime, updated_at: datetime)
$ rake db:migrate
(in /home/alice/rails/mytest)
==  AddAddressToDiary: migrating ==============================================
-- add_column(:diaries, :address, :string)
   -> 0.0007s
==  AddAddressToDiary: migrated (0.0007s) =====================================
$ r c
Loading development environment (Rails 3.0.6)
ruby-1.9.2-p136 :001 > Diary
 => Diary(id: integer, shop: string, date_on: date, created_at: datetime, updated_at: datetime, address: string)

last add column is delete

rake db:rollback
$ r c
Loading development environment (Rails 3.0.6)
ruby-1.9.2-p136 :001 > Diary
 => Diary(id: integer, shop: string, date_on: date, created_at: datetime, updated_at: datetime, address: string)
$ rake db:rollback [STEP=n]
(in /home/alice/rails/mytest)
==  AddAddressToDiary: reverting ==============================================
-- remove_column(:diaries, :address)
   -> 0.0452s
==  AddAddressToDiary: reverted (0.0453s) =====================================
$ r c
Loading development environment (Rails 3.0.6)
ruby-1.9.2-p136 :001 > Diary
 => Diary(id: integer, shop: string, date_on: date, created_at: datetime, updated_at: datetime)

change column*1


you'll generate migration file.

rails generate migration FixColumnName
$ r g migration FixColumnName
      invoke  active_record
      create    db/migrate/20110421143838_fix_column_name.rb


Then you edit db/migrate/20110421143838_fix_column_name.rb.

rename_column(table_name, column_name, new_column_name)
class FixColumnName < ActiveRecord::Migration
  def self.up
    rename_column :diaries, :address, :shop_address
  end

  def self.down
    rename_column :diaries, :shop_address, :address
  end
end
$ rake db:migrate
(in /home/alice/rails/mytest)
==  FixColumnName: migrating ==================================================
-- rename_column(:diaries, :address, :shop_address)
   -> 0.0206s
==  FixColumnName: migrated (0.0207s) =========================================

$ r c
Loading development environment (Rails 3.0.6)
ruby-1.9.2-p136 :001 > Diary
 => Diary(id: integer, shop: string, date_on: date, created_at: datetime, updated_at: datetime, shop_address: string)