migration をつかったデータベーススキーマの操作
migration ファイルの生成
あとから「必要なカラムが増えた」「カラムの名前を変更したい」「やっぱりこのテーブル要らない」など 保存するデータに変更があったときに、rails generate migration コマンドによるmigrationファイルの生成が役に立つ。
おおまかな手順としては、
- 追加(/削除/変更)したいカラムやテーブルのマイグレーションファイルの生成
- マイグレーションファイルの統合(rake db:migrate)
- 手動で手を加える必要があるところを編集
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