Active Record マイグレーション - Railsガイド を読んだメモです。
マイグレーション名が"AddColumnToTable"や"RemoveColumnFromTable"で、かつその後ろにカラム名や型が続く形式になっていれば、適切なadd_column文やremove_column文を含むマイグレーションが作成されます。
これは知っていたが、複数カラムもマイグレーションにaddという文字が入っていれば自動でadd_columnメソッドが追記されるのは知らなかった。
$ rails generate migration AddDetailsToProducts part_number:string price:decimal
#model.rb class AddDetailsToProducts < ActiveRecord::Migration[5.0] def change add_column :products, :part_number, :string add_column :products, :price, :decimal end end
その他気づき
- change_columnコマンドはロールバックされない(可逆的でない)
- なので up down メソッドを使う
reversible
メソッドもあるが up, downメソッドのほうがわかりやすい
remove_column
は、3番目の引数でカラムの型を指定すればロールバック可能になるrevert
は以前のマイグレーションの一部のみを逆転したい場合に便利とのことだが、よくわからない。
アプリケーションのデータベースの新しいインスタンスを作成する場合、マイグレーションの全履歴を一から繰り返すよりも、rails db:schema:load
でスキーマファイルを読み込む方が、高速かつエラーが起きにくい傾向がある。
感想
そもそものDBの仕組みをよく理解しておかないと本当の意味でActiveRecordは使いこなせなさそう。というかマイグレーションを作成するときに納得して使えなさそう。