Scaffoldで作ったdabaseに新たなフィールド(カラム)を追加してみる

実際にscaffoldで作ったんだけど新たにフィールドを作成する場合は一度destroyコマンドを使って消してから再度フィールドを全て含めた上でもう一回作りなおすのがいいが、ある程度自分で手を加えてしまったので消すのは面倒臭いという場合は、modelのフィールドを追加するために新しくg modelの中のmigration fileを追加する。そのファイルの中に行う必要のあるアクションを記入する。migration file建築内容の指示書。db:migrateを行うことによって命令することができる、と考えれば良い。


# マイグレーションファイル作成コマンド
$ rails generate migration クラス名
クラス名は何でもいいが「アクション+テーブル名」が慣例。これで/db/migrate/タイムスタンプ_クラス名.rbというファイルが作られる。 しかしこのままだと実際のDBには反映されないので、db:migrateコマンドを実行する。念のため他のアクションコマンドも記載しておく。後々使えそうだし。

# 実行
$ rake db:migrate
# ロールバック
$ rake db:rollback # ロールバックを使用することによって一つ前の状態に戻ることが出来る。
# 確認
$ rake db:migrate:status

# すでに実在しているフィールドを変更する
$ rails g migration ChangeColumnToUser

# 変更内容
def up
change_column :users, :uuid, :string, null: false, default: 0
end

# 変更前の状態
def down
change_column :users, :uuid, :string, null: true, default: 0
end
end


フィールドを追加/削除する
$ rails g migration AddColumnToUser フィールド名:フィールドの種類

/db/schema.rbに全ての指示が記載されているのでそこに変更が記載されていれば成功したという意味。
class AddColumnToUser < ActiveRecord::Migration
def change

# 追加
add_column :users, :piyo, :string

# 削除
remove_column :users, :piyo, :string

# 追加する場所を指定する場合
add_column :users, :piyo, :string, :after => :uuid
end
end

成功するとこんなかんじではきだしてくれる。

参照:
rails generate migrationコマンドまとめ
Railsのmigrationの基本とレシピ集