0
0

More than 1 year has passed since last update.

railsのマイグレーションの見方・できること

Posted at

動機

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は、このマイグレーションを逆進させる方法も知っていますマイグレーションをロールバックさせると、テーブルは削除されます。

??(理解できた時に編集)

サポートされている場合

トランザクション内でスキーマを変更するステートメントがデータベースでサポートされていれば、マイグレーションはトランザクションでラップされます。

サポートされていない場合

この機能がデータベースでサポートされていない場合は、マイグレーションの一部が失敗した場合にロールバックされません。その場合は、変更の逆進を手動で記述する必要があります。

とりあえず作成したい。

一度に理解することはできないから、とりあえずマイグレーションファイルを作成することをしてみたい。
長くなりそうだから次の記事に書く。

出典

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0