78
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2014-11-24

#はじめに
「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, :integer, null: true
  end
end

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

最後に

$ rake db:migrate

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

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

78
81
1

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
78
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?