動機
MySQLに直接テーブルを作っていたためこれからのことを考えて、使えるように勉強する。
一応テーブルを作成するところまでできるようになりたい。
マイグレーションとは?
マイグレーションは、データベーススキーマの継続的な変更(英語)を、統一的かつ簡単に行なう
ための便利な手法です。マイグレーションではRubyのDSL
が使われているので、生のSQLを作成する必要がなく、スキーマおよびスキーマ変更がデータベースに依存しなく
なります。
個別のマイグレーションは、データベースの新しい「バージョン」
とみなせます。スキーマは空の状態から始まり
、マイグレーションによる変更が加わるたびにテーブル、カラム、エントリが追加または削除されます。Active Recordはマイグレーションの時系列に沿ってスキーマを更新する方法を知っているので、履歴のどの時点からでも最新バージョンのスキーマに更新
できます。Active Recordはdb/schema.rb
ファイルを更新し、データベースの最新の構造と一致する
ようにします。
例
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
コードの意味
テーブル名を指定
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table ここ⇨:products do |t|
テーブルのカラムを指定
上のマイグレーションを実行するとproductsという名前のテーブルが追加されます。
t.string :name
t.text :description
この中にはnameというstringカラムと、descriptionというtextカラムが含まれています。
主キーはidという名前で暗黙に追加されます。idはActive Recordモデルにおけるデフォルトの主キーです。
気づき
idは自動的に生成されるのか。
created_atとupdated_atという2つのカラムを追加
t.timestamps
timestampsマクロは、created_atとupdated_atという2つのカラムを追加します。
これらの特殊なカラムが存在する場合、Active Recordによって自動的に管理されます。
マイグレーションのできること
マイグレーションで定義されているのは、時間を先に進めるときに実行したい動作である点にご注目ください。
マイグレーションでテーブルを作ることができる
マイグレーションの実行前にはテーブルは1つもありません。マイグレーションを実行すると、テーブルが作成されます。
マイグレーションをロールバックさせる
Active Recordは、このマイグレーションを逆進させる方法も知っています
。マイグレーションをロールバックさせると、テーブルは削除
されます。
??(理解できた時に編集)
サポートされている場合
トランザクション内でスキーマを変更するステートメントがデータベースでサポートされていれば、マイグレーションはトランザクションでラップ
されます。
サポートされていない場合
この機能がデータベースでサポートされていない場合は、マイグレーションの一部が失敗した場合にロールバックされません。その場合は、変更の逆進を手動で記述する
必要があります。
とりあえず作成したい。
一度に理解することはできないから、とりあえずマイグレーションファイルを作成することをしてみたい。
長くなりそうだから次の記事に書く。
出典