【パーフェクト Ruby on Rails】を読む - その16
3-3-2 テーブルの定義を反映させる
マイグレーションファイル内ではデフォルトではchangeメソッドが使用されています。
bin/rails db:migrate
を実行したら、upになり、bin/rails db:rollbackを行うとdownになります。
remove_columnはupになる事でテーブルが削除されるもので、普段通りにコードを書くと、rollbackで削除されたものを復元できませんが、Railsガイドにこのような記述がありました。
remove_columnは、3番目の引数でカラムの型を指定すればロールバック可能になります。元々のカラムオプションも指定しておかないと、ロールバック時にRailsがカラムを再作成できなくなります。
remove_column :posts, :slug, :string, null: false, default: ''
この例でいうと、:stringが該当します。カラムの型は文字列だと指定することで、rollbackによる復元が可能になります。
bin/rails db:rollbackの挙動についてあやふやだったので調べました
% rails db:rollback
コマンドを使うと、% rails db:migrate
してup状態の1個前のマイグレーションファイルをdownにしてくれます。2個前ならSTEP=2というオプションを付与します。
upメソッドとdownメソッドについて
正直、changeメソッド以外のupメソッドの時とdownメソッドの時でマイグレーションの中の挙動を変えるのを書く場合に遭遇した事がないので、使う時にはまた読み返したいと思いました。
データベース周りの全体像がイメージできていなかったので調べました
画像引用
とてもわかりやすい図をありがとうございます。
- DBをCREATEした時にデータベースに情報を入れるには、1回目の作成時にはschemaファイルはないのでマイグレーションファイルから取り込む必要があります。
- 作成したマイグレーションファイルを
rails db:migrate
するとdb:schema:dump
も実行されschema.rbが出来上がります。 rails db:schema:load
を使うとき
個人的に興味深かったところ
rails db:migrateとrails db:rollbackを行うと同時にrails db:schemaも実行されているから、schema.rbの内容が書き変わるというところが、点と点が線になった感覚がありました。
(´・ω・`)
(´-ω-`)