Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby on Rails | Migrationでテーブルにカラムを追加、削除する

概要

Migrationでテーブルにカラムを追加、削除する

内容

Migrationでテーブルにカラムを追加、削除するするには以下を利用します。

rails g migration add_column_name_to_table_name column_name:data_type
rails g migration remove_column_name_from_tableName columnName:dataType

サンプル

BookReview(書評)モデルを作成
rails g model book_review rank:integer
      invoke  active_record
      create    db/migrate/20130711155242_create_book_reviews.rb
      create    app/models/book_review.rb
      invoke    rspec
      create      spec/models/book_review_spec.rb
マイグレーションの実行
rake db:migrate
==  CreateBookReviews: migrating ==============================================
-- create_table(:book_reviews)
   -> 0.0669s
==  CreateBookReviews: migrated (0.0670s) =====================================
生成されたテーブルの確認
mysql> desc book_reviews;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| rank       | int(11)  | YES  |     | NULL    |                |
| created_at | datetime | YES  |     | NULL    |                |
| updated_at | datetime | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+
書評モデルのコメント(comment)カラム、備考(notes)カラムを追加する
rails g migration add_comment_to_book_review comment:string
rails g migration add_notes_to_book_review notes:string
マイグレーションの実行
besrk db:migrate
==  AddCommentToBookReview: migrating =========================================
-- add_column(:book_reviews, :comment, :string)
   -> 0.0600s
==  AddCommentToBookReview: migrated (0.0601s) ================================

==  AddNotesToBookReview: migrating ===========================================
-- add_column(:book_reviews, :notes, :string)
   -> 0.0070s
==  AddNotesToBookReview: migrated (0.0070s) ==================================
変更されたテーブルの確認
mysql> desc book_reviews;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| rank       | int(11)      | YES  |     | NULL    |                |
| created_at | datetime     | YES  |     | NULL    |                |
| updated_at | datetime     | YES  |     | NULL    |                |
| comment    | varchar(255) | YES  |     | NULL    |                |
| notes      | varchar(255) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
書評モデルの備考(notes)カラムを削除する
rails g migration remove_notes_to_book_review notes:string
マイグレーションの実行
besrk db:migrate
==  RemoveNotesToBookReview: migrating ========================================
-- remove_column(:book_reviews, :notes, :string)
   -> 0.0064s
==  RemoveNotesToBookReview: migrated (0.0066s) ===============================
変更されたテーブルの確認
mysql> desc book_reviews;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| rank       | int(11)      | YES  |     | NULL    |                |
| created_at | datetime     | YES  |     | NULL    |                |
| updated_at | datetime     | YES  |     | NULL    |                |
| comment    | varchar(255) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+