0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

railsのマイグレーションでスキーマを作る

Last updated at Posted at 2022-11-06

目標

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_columnremove_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

マイグレーションの編集

(勉強の際また今度)

感想

手を動かしてかそうかと思ったが、やるべきことを思い出しそれが終わってからやることにする。
失敗した。
計画的に勉強しなければ、急かしてしまった。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?