Rails – モデル生成とマイグレーション

概要

Railsでは、データベースのテーブルをモデルを通して扱う。そのための開発時点での操作は以下のとおり。

  1. モデルの生成・操作
  2. マイグレーションによるテーブルの生成・操作

モデルの生成・削除

モデルの生成

テーブルに対して1つのモデルを生成する。

基本形は以下のコマンド。

rails generate model model_name

生成時にテーブルのフィールド名とフィールドの型を指定する場合(フィールド指定の間はスペース)。

rails generate model model_name col1:type col2:type ... 

フィールドの型

  • primary_key
  • binary, boolean
  • date, datetime, time, timestamp
  • decimal, float, integer
  • string, text

生成されるファイル

実行後、モデルクラスとマイグレーションの2つのクラスファイルが生成される。

モデルクラスファイル

app_name/app/models/model_name

  • ファイルの内容はクラス定義
  • クラス名はモデル名のパスカルケース(ModelName)
  • ApplicationRecordを継承

マイグレーションファイル

app_name/db/migrate/yyyymmddhhmmss_create_model_name.rb

  • テーブルを扱うマイグレーションクラスが定義される
  • マイグレーションクラスはActiveRecordモジュールのMigrationクラスを継承している
  • マイグレーションクラスのクラス 名はCreateModelNames
    • パスカルケース
    • 最後にsがついた複数形
  • マイグレーションクラスのcreate_tableはDSL(ドメイン固有言語、Railsdoc)
    • テーブル名はスネークケースでモデル名の複数形
    • 生成時にフィールド名と型を指定した場合、create_tableブロック内でフィールドが定義される

モデルの削除

モデルの削除は以下のコマンドで、モデルクラスファイルとマイグレーションファイルが削除される。

rails destroy model model_name

ただしデータベース上のテーブルは削除されない。

テーブルの生成・削除

テーブルの生成

以下のコマンドで、マイグレーションファイルの設定に従ってデータベースにテーブルが生成される。

rails db:migrate

モデル生成時にフィールドを指定しなかった場合やモデル生成後にフィールドを追加する場合は、マイグレーションファイルにフィールドを追加する。

一度migrateした後にマイグレーションファイルを修正して再度migrateしても反映されない。一旦rails db:rollbackでテーブル生成前の状態に戻してからマイグレーションファイルを修正して再度実行。

テーブルの削除

ロールバック

  • rails db:rollbackで直前に生成したテーブルを削除

MySQLでの削除

  • MySQLのコンソールでDROP TABLEを実行

マイグレーション

model_nameモデルのmodel_namesテーブルを例にとる。

  • model_nameモデルを削除
    • rails destroy model model_name
  • 以下のコマンドでダミーのマイグレーションファイルを生成
    • rails generate migration 任意の名前
  • マイグレーションファイルのdef changeブロックに以下を追加
    • drop_table: model_names
  • rails db:migrationを実行
  • db/migrate/マイグレーションファイルを削除

実行例

 モデルの生成

demo_recordという名前でモデルを生成する。このモデルはname:stringage:integerの2つのフィールドを持つモデルを生成する。

モデルファイル

モデルファイルがapp/modelsの下に作成される。モデルファイル名はモデル生成時のモデル名のスネークケースになっている。

モデルファイルの内容はモデルクラスの定義で、生成当初は空の定義。モデルクラス名がモデル名のパスカルケースになっている。

マイグレーションファイル

マイグレーションファイルがdb/migrateの下に作成される。

マイグレーションファイルの内容はテーブル生成クラスの定義で、create_tableブロックの中でフィールドの名前と型を指定している。

  • モデル名demo_recordに対して生成されるテーブルクラス名はCreateDemoRecordsで、接頭辞Createにモデル名に複数形のsがついたパスカルケース
  • create_tableブロックでフィールドの型とフィールド名を定義

テーブルの生成~マイグレーション

rails db:migrateコマンドにより、マイグレーションファイルの設定に基づいてテーブルを生成する。

rails dbconsoleでテーブルが生成されていることを確認する。

生成されたテーブルの構成を確認。

マイグレーションの状態確認

db:migration:statusでマイグレーションの状況を確認できる。部分的にロールバックした時などの確認に便利。

ロールバック

すべてロールバック

rails db:rollbackにより、いったんテーブル作成前の状態に戻す。

MySQLで確認すると、テーブルはなくなっている。

ロールバックステップ指定

rails db:migrate STEP=nでロールバックするステップ数を指定可能。STEPは大文字でないと機能しない。

 

マイグレーションファイルへの追記

マイグレーションファイルに新たなフィールドを1行追加する。

再度マイグレート。

MySQLで確認すると、テーブルが作成されている。

新たなフィールドが追加されているのが確認できる。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です