#はじめに
アプリを作成していて、後からカラムを追加したい時に、はじめはschema.rbに書けばいいんじゃないか?と思っていたけど(これはNG笑)、正式なやり方を学んだの備忘録として残しておこうと思います。
#マイグレーションについて
データベースにテーブルを追加するには、Railsが用意しているマイグレーションという仕組みを使っていきます。
このマイグレーションとは、データベーススキーマへの変更を随時追加、削除していくための仕組みです。
具体的にはテーブルを作成・削除、テーブルのカラムを追加・削除が行えます。
#モデルの作成からテーブル作成
railsにてモデルを作成する際に、テーブルを作成するためのマイグレーションファイルが同時に作られます。
※モデルを作成するコマンドは以下になります。
$ bin/rails generate model [モデル名] [属性名:データ型 属性名:データ型・・・] [オプション]
例をあげると、Userモデルを作成したい場合、[モデル名]にUser、[属性名:データ型]にはname:string email:stringを指定します。コマンドは以下のようになります。
$ rails generate model User name:string email:string
コマンドを実行すると自動生成されるものが以下の4tつになります。
①モデルのクラスファイル
②マイグレーションファイル
③モデルの自動テスト
④モデルの自動テストで使うfictureファイル
マイグレーションファイルに関して生成されたファイルはこのようになります。
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
end
上記ファイルが生成された後、データベースのテーブルの定義をRailsに読み込ませるために、次のコマンドでマイグレーションを実行します。
rails db:migrate
これでUsersテーブルが作成されました!
#テーブルの削除やカラムの追加・削除
やり方としては、新たにマイグレーションを個別で作成し、その中に変更したい処理を記述して、$ rails db:migrateコマンドで実行をします。
マイグレーションファイルを作成するコマンド
$ rails g migration クラス名 カラム名:データ型
※クラス名はAddXXXToYYY、またはRemoveXXXFromYYYとします。
「XXX」にはテーブル名、YYYにはカラム名(複数のカラムを変更したい場合などがあるのでカラム名ではなくても問題ありません)
[カラム追加のマイグレーション作成]
※nickname(string型)のカラムを追加したい場合
rails generate migration AddNicknameToUsers nickname:string
ファイルが作成されたら$ rails db:migrateを実行し反映させます。
[カラム削除のマイグレーション作成]
※name(string型)のカラムを削除したい場合
rails generate migration RemoveNameFromUsers name:string
ファイルが作成されたら$ rails db:migrateを実行し反映させます。
#ファイルの削除
データベースへ反映ができ、特に残しておく必要がなければ追加したファイルは削除しておいてもいいでしょう。
ファイルツリーから直接消さずに、コマンドを実行してファイルを削除しましょう。コマンドは以下になります。
rails destroy migration クラス名
(例)先ほどのファイルを削除する場合
rails destroy migration AddNicknameToUsers
#参考
https://qiita.com/azusanakano/items/a2847e4e582b9a627e3a
https://qiita.com/kanuu/items/a9223712ee0ff8d19d56