目標
railsのマイグレーションでスキームを作れるようになる。
マイグレーションのファイルの位置
マイグレーションはdb/migrateディレクトリに保存されます。1つのマイグレーションファイルが1つのマイグレーションクラスに対応します。
マイグレーションの名前の形式
マイグレーションファイル名はYYYYMMDDHHMMSS_create_products.rb
のような形式になります。
ファイル名の日時はマイグレーションを識別するUTCタイムスタンプであり、アンダースコアに続いてマイグレーション名が記述されます。
マイグレーションのファイルの名前とファイル名の後半は一致する必要がある
マイグレーションのクラス名(CamelCase)
は、ファイル名の後半(snake_case)
と一致する必要があります。たとえば、
20080906120000_create_products
.rbではCreateProducts
というクラスを定義し、20080906120001_add_details_to_products
.rbではAddDetailsToProducts
というクラスを定義する必要があります。
実行順の注意(まだ理解していない。)
Railsはマイグレーションの実行順序をファイル名のタイムスタンプで決定するので、マイグレーションを他のアプリケーションからコピーする場合や、自分でマイグレーションを生成する場合は、実行順に注意する必要
があります。
タイムスタンプを算出する作業は退屈です。Active Recordにはタイムスタンプを自動生成するジェネレータが用意されています。
生成をするマイグレーションのコマンド
$ bin/rails generate migration AddPartNumberToProducts
実行結果
class AddPartNumberToProducts < ActiveRecord::Migration[7.0]
def change
end
end
カラムやデータ型の設定を追加
マイグレーション名が"AddColumnToTable"や"RemoveColumnFromTable"で、かつその後ろにカラム名や型が続く形式
になっていれば、適切なadd_column文やremove_column文を含むマイグレーション
が作成されます。
気づき
追加するだけでadd_column
やremove_column
の文が含まれているのか。
カラムやデータ型の設定加えてコマンドを送る。
$ bin/rails generate migration AddPartNumberToProducts part_number:string
実行結果
class AddPartNumberToProducts < ActiveRecord::Migration[7.0]
def change
add_column :products, :part_number, :string
end
end
削除をするマイグレーションを行う。
$ bin/rails generate migration RemovePartNumberFromProducts part_number:string
気づき
string型
のpart_number
カラムを削除するのか。
実行結果
class RemovePartNumberFromProducts < ActiveRecord::Migration[7.0]
def change
remove_column :products, :part_number, :string
end
end
テーブルを生成する
マイグレーション名が"CreateXXX"
のような形式で、その後にカラム名と型が続く場合、XXXという名前のテーブルが作成
され、指定の型のカラム名がその中に生成
されます。たとえば次のようになります。
$ bin/rails generate migration CreateProducts name:string part_number:string
実行結果
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table :products do |t|
t.string :name
t.string :part_number
t.timestamps
end
end
end
マイグレーションの編集
(勉強の際また今度)
感想
手を動かしてかそうかと思ったが、やるべきことを思い出しそれが終わってからやることにする。
失敗した。
計画的に勉強しなければ、急かしてしまった。