LoginSignup
64

More than 5 years have passed since last update.

Rails 3.2 migrationメモ

Last updated at Posted at 2012-12-26

migration をつかったデータベーススキーマの操作

migration ファイルの生成

あとから「必要なカラムが増えた」「カラムの名前を変更したい」「やっぱりこのテーブル要らない」など 保存するデータに変更があったときに、rails generate migration コマンドによるmigrationファイルの生成が役に立つ。

おおまかな手順としては、

  1. 追加(/削除/変更)したいカラムやテーブルのマイグレーションファイルの生成
  2. マイグレーションファイルの統合(rake db:migrate)
  3. 手動で手を加える必要があるところを編集

eg. 生年月日カラムを追加するマイグレーションファイルの生成

rails g migration add_column_date_of_birth_to_students dateOfBirth:date

生成されたファイルの内容:

YYYYMMDDHHMMSS__add_column_date_of_birth_to_students.rb
class AddColumnDateOfBirthToStudents < ActiveRecord::Migration
  def change
    add_column :students, :dateOfBirth, :date
  end
end

命名規約に沿わずにファイルを生成した場合(後述)、以下のファイルが生成される。

YYYYMMDDHHMMSS__add_column_date_of_birth_to_students.rb
class Students < ActiveRecord::Migration
  def up

  end

  def down

  end
end

その場合、upにはテーブル、カラムの変更内容を、downには変更を戻す内容を記述する。

YYYYMMDDHHMMSS__add_column_date_of_birth_to_students.rb
class Students < ActiveRecord::Migration
  def up
    add_column :students, :dateOfBirth, :date

  end

  def down
    remove_column :students, :dateOfBirth
  end
end

  • データベースのカラムを追加する
rails g migration add_column_name_to_tableName column:dataType
  • データベースのカラムを削除する
rails g migration remove_column_name_from_tableName columnName:dataType
  • migration ファイルの適用
rake db:migrate

名前は自由に決めることができるが、生成するmigrationファイルの命名の中にaddやremove、changeなどがあると、それに反応して追加や削除など 命名に適したファイルを生成してくれる。

この、名前に応じたファイルを用意してくれるのは、リストにあげると、以下のとおり。

  • add_column
  • add_index
  • change_column
  • change_table
  • create_table
  • drop_table
  • remove_column
  • remove_index
  • rename_column

※追加したり削除したカラムは、ファイルまでは自動で編集されないので、手動で編集する必要がある。(これでハマったことがあった。)

カラムを追加、データベースの統合もしたけど、なんかエラーが出る例:

rails g migration add_column_phone phone:string
rake db:migrate

ファイルを見てみると...

member.rb
class Hoge < ActiveRecord::Base
  attr_accessible :name, :address #「:phone」が追加されてない
end

-

参照

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64