Rails勉強中です。DB管理するためにどうしたらいいのか分からない、Rails初学者を対象としています。
まずはRails標準のマイグレーションについて理解したい、そんな方向けです。
マイグレーション is 何
テーブルの作成、変更するためのRailsの標準機能。以下の図のようなしくみになっている。
基本的なマイグレーションの使い方
使用できるマイグレーションのメソッドの詳細はこちら
検証環境
- ruby 2.6.1
- Rails5.2.2.1
作成
マイグレーションファイルの作成にはメインとして以下の2パターンがある。
- rails generate model コマンドを使用してモデルと併せて作成する。
- rails generate migration コマンドを使用してマイグレーションファイル単体で作成する。
例(コマンド)
rails generate migration 名前 [フィールド名 :データ型] [オプション]
作成するときの名前(ファイル名)には形式に沿った名前にすることで、マイグレーションの骨組みコードだけでなく、具体的な追加、削除のコードも自動生成してくれる。
手動で作成する場合はcreate_tableメソッドを使用してマイグレーションファイルに記載していく。
作成されたマイグレーションファイルにて以下記述
def change create_table :tests do |t| t.string :hoge, :null => false t.string :fuga, :null => false t.timestamps end end
また、Railsは基本的に主キー列idが自動生成される、 t.timestamps でcreated_at, updated_atも生成されるので、この辺りは上手に使用していきたい。
というか、これらは基本的に付けたまま使用するのが好ましい。
rakeコマンドを使用して紹介している情報もあるが、rails4以前はrailsコマンドとrakeコマンドで行える処理が分かれていたかららしい。
それがややこしいので、rails5になり、全てrailsコマンドで行えるようになった。(rakeも従来通り使える)
つまりrailsコマンドが正義。rails5以降はrailsコマンドだけ覚えておけば良い!!
サンキューrails
変更
例(コマンド)
rails generate migration change_テーブル名
何を行ったかわかりやすい名前をつけるchange_テーブル名_追加内容 とかでも良いかも
作成されたマイグレーションファイルにて以下記述
def change change_table テーブル名 do |t| 修正の為の命令(列の追加、削除、リネーム、etc) t.string :name (string型のname追加) t.remove :hoge (hoge列を削除) end end
change_tableメソッドを使用することで、add_columnのようなメソッドと異なりテーブル名を何度も記述せずにすむので、コードがスマートになる。
削除
例(コマンド)
rails generate migration change_テーブル名
作成したマイグレーションファイルにて以下記述
def change drop_table :テーブル名 end
反映方法
コマンド(実行していないマイグレーションファイルの実行)
rails db:migrate
この時の注意点としてmigrateはデフォルトでdevelopment環境を対象としているため、test環境や本番環境では環境を指定してmigrateする必要がある。
例(productionへ反映)
rails db:migrate RAILS_ENV=production
その他、開発時などに使用するであろうコマンド(DBを一度削除してもう一度作成し db:migrateの実行)
rails db:migrate:reset
コメント