Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
66
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Rails 3.2 migrationメモ

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

-

参照

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
66
Help us understand the problem. What are the problem?