プログラミング

【Rails】基本的なマイグレーションファイルの書き方

マイグレーションファイルの書き方
ユウマ
こんにちは、ユウマ(@yuuuma_11)です。

Railsでマイグレーションファイルを扱う時に忘れがちなコマンドや、書き方について必要最低限な分だけ簡単にまとめてみました。

 

マイグレーションファイルの生成

マイグレーションファイルを生成するコマンドは2つあります。

1つ目がモデルとマイグレーションファイルを同時に作成するコマンドです。

テーブルを新たに作成する時は、このコマンドを使用してモデルとマイグレーションファイルを同時に作成してしまうことが多いです。

 

2つ目はマイグレーションファイルのみを生成する方法です。

こちらは主に、既に存在しているテーブルの情報を変更する時に使用します。

 

マイグレーションファイルの書き方

今回はproducts(商品)テーブルを作成し、テーブルの中に「name(商品名)」「description(商品の説明)」 「price(商品の価格)」の3つのカラムを作ることを想定して解説します。

 

新たにテーブルを作成する時

まずは新しくテーブルを作成する際の書き方です。

 

制約の設定を特に行わない場合

新たにテーブルを作成する際、制約の設定を特に行わない場合以下の書き方になります。

 

制約の設定を行う場合

制約の設定を行う場合(以下はカラムが空で保存されるのを防ぐ設定)は、以下の書き方になります。

 

外部キー制約をつける場合

productsテーブルの他に、商品の画像を保存する「imagesテーブル」があることを想定して説明します。

外部キー制約をつける場合は、以下の書き方で設定することが可能です。

上記のように書くことで、「image_id」カラムが作成されimagesテーブルと紐付けることが可能になります。

ちなみに、reference型を使用しないと「foreign_key: true」を付け足しても外部キー制約にはなりません。

 

既に存在するテーブルに変更を加える時

次は、既に存在するテーブルにカラムを追加したり、既に存在するカラムを変更する場合の書き方をまとめていきます。

 

カラムを追加する

まずは既に存在するテーブルに新しいカラムを追加する書き方です。

以下の例は、productsテーブルにsize(商品の大きさ)カラムを追加する書き方です。

 

カラムを削除する

カラムを削除する場合は「remove_column」を使います。

ポイント

ここで注意しないといけないのが、カラムを削除する際、型を指定してあげないとロールバック時に「型が無い」というエラーが出てしまいます。

 

カラム名を変更する

次に、作成済のカラムの名前を変更する書き方です。

以下の例では、間違えて作成した「prise」カラムを「price」に変更しています。

 

 カラムのデータ型を変更する

カラムのデータ型を変更する場合は、changeメソッドではなく、up/downメソッドを使用します。

以下の例では、priceカラムのデータ型を「string」から「integer」に変更しています。

ポイント

「change_column」を使う時、changeメソッドを使用してもマイグレーション自体はできるのですが、ロールバック時にエラーが出てしまいます。

そのためup/downメソッドを使って、バージョンを上げるときの処理とバージョンを下げるときの処理を書いておくことで、エラーを回避することができます。

 

カラムにNOT NULL制約を設定する

最後に、既に存在しているカラムにNOT NULL制約を設定する方法です。

「change_column_null」を使用します。

 

最後に

マイグレーションファイルの書き方は、慣れていないと忘れやすいと思います。

頻繁に使用する基本的な部分はなるべく覚えて、検索する手間を省いていけるようにした方がいいですね。

-プログラミング

Copyright© ユウマのブログ , 2020 All Rights Reserved.