Help us understand the problem. What is going on with this article?

押さえておきたい!「Ruby on Rails」マイグレーションを使ったカラムの変更方法まとめ

More than 5 years have passed since last update.

はじめに

「Ruby on Rails」で必ず必要になってくる、マイグレーション系
一度作成したカラムを変更したいときってありますよね。
今回は最低限押さえておきたい、マイグレーションを使ったカラムの変更方法をまとめてみました。

そもそもマイグレーションって?

マイグレーションとはマイグレーションファイルというものを元にテーブルを新規に作成したりカラムやインデックスの追加といった変更を行なうことが出来ます。
つまりマイグレーションファイルさえあれば、簡単にカラムを変更することが出来るのです。

マイグレーションファイル実行までの手順

ざっくり説明すると
マイグレーションファイル作成 → 生成したマイグレーションファイルの編集 → マイグレーションファイル実行
これだけです。
では実際にマイグレーションを使ったカラムの変更方法をご紹介していきます。

カラムの追加

$ rails generate migration Addカラム名Toテーブル名 カラム名:型名
例:($ rails generate migration AddHogeToHuga hoge:string)

「Addカラム名Toテーブル名」のカラム名とテーブル名は先頭を大文字にして記入します。

これでマイグレーションファイルを生成することが出来ます。
あとは

$ rake db:migrate

で実行してデータベースに反映させます。(生成したマイグレーションを弄らなくても大丈夫)

カラムの削除

$ rails generate migration remove_カラム名_to_テーブル名 カラム名
例:($ rails generate migration remove_hoge_to_huga hoge)

これでマイグレーションファイルを生成することが出来ます。
あとは

$ rake db:migrate

で実行してデータベースに反映させます。(生成したマイグレーションを弄らなくても大丈夫)

カラムの型変更

$ rails generate migration change_カラム名_to_テーブル名
例:($ rails generate migration change_hoge_to_huga)

これでマイグレーションファイルを生成することが出来ます。
次に生成したマイグレーションファイルを編集します。

20141124000000_change_column_to_Huga.rb
class ChangeColumnToHuga < ActiveRecord::Migration
  #変更後の型
  def up
    change_column :Hugas, :hoge, :integer, null: false, default: 0
  end

  #変更前の型
  def down
    change_column :Hugas, :hoge, :intger, null: true
  end
end

このように編集します。
(「def up」「def down」はマイグレーションファイル生成時記述されていませんが、上書きして大丈夫です)

最後に

$ rake db:migrate

で実行してデータベースに反映させます。

以上です。カラムの変更は頻繁に行われるのでここは押さえておきたいですね。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした