LoginSignup
0
2

More than 3 years have passed since last update.

【Rails】migrationファイルまとめ(カラム追加・削除・変更)

Posted at

はじめに

学習中の備忘録です。

概要

  • カラムのデータ型一覧
  • モデル作成時
  • カラム追加
  • カラム削除
  • データ型変更
  • カラム名変更
  • モデル作成時(外部キー制約付)
  • カラム追加時(外部キー制約付)

カラムデータ型一覧

データ型 型の種類 用途
integer 数字 金額、回数など
string 文字(短文) ユーザー名、メールアドレスなど
text 文字(長文) 投稿文など
boolean 真偽 はい・いいえの選択肢など
datetime 日付と時刻 作成日時、更新日時など
float 浮動小数 小数点含む6桁までを丸めずに保存
decimal 精度の高い少数 小数点以下桁数揃えて正確に保存
timestamp より細かい日時 より細かい日時
time 時間 時間
date 日付 日付
binary バイナリデータ バイナリデータ

※floatとdecimalについて詳しくはこちら
https://qiita.com/y-ken/items/b8601092d0261c3a556d
※datetime,time,dateについて詳しくはこちら
https://qiita.com/y-ken/items/b8601092d0261c3a556d

前提

  • rails 5.2.4.1
  • コマンド入力はファイル名のみですのでファイルは編集してください。

モデル作成時

postモデルを作成。

rails g model post

migrationファイルを編集してpostsテーブルにpostカラムをstring型で作成。

class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
      t.string :post
      t.timestamps
    end
  end
end

カラム追加

migrationファイル作成。

rails g migration AddTitleToPosts

postsテーブルにtitleカラムをstring型で追加。

class AddTitleToPosts < ActiveRecord::Migration[5.2]
  def change
    add_column :posts, :title, :string
  end
end

カラム削除

migrationファイル作成。

rails g migration RemoveTitleFromPosts

postsテーブルのtitleカラムを削除。

class RemoveTitleFromPosts < ActiveRecord::Migration[5.2]
  def change
    remove_column :posts, :title, :string
  end
end

データ型変更

migrationファイル作成。

rails g migration ChangeDatatypeNameOfPosts

postsテーブルのnameカラムをtext型に変更。

class ChangeDatatypeNameOfPosts < ActiveRecord::Migration[5.2]
  def change
    change_column :posts, :name, :text
  end
end

カラム名変更

migrationファイルを作成。

rails g migration RenameNameColumnToPosts

postsテーブルのnameカラムのカラム名をtitleに変更。

class RenameNameColumnToPosts < ActiveRecord::Migration[5.2]
  def change
    rename_column :posts, :name, :title
  end
end

モデル作成時(外部キー制約付)

postsテーブルにuser_idという外部キー付のカラムを作成。

class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
      #~省略~
      # user_idという名前で users.id への外部キー制約をはる
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end

カラム追加時(外部キー制約付)

postsテーブルにuser_idという外部キー付のカラムを作成。

class AddUserIdToPosts < ActiveRecord::Migration[5.2]
  def change
    #user_idという名前で users.id への外部キー制約をはる
    add_reference :posts, :user, foreign_key: true
  end
end

※foreign_key オプションを省略してしまうと、外部キー制約がはられません。
※indexを作りたくない場合はオプションで明示的に index: false を記述。

まとめ

今回は個人的に日頃使用するものでまとめました。
コマンド入力や外部キーについては参考記事にもっと詳しく書いてあります。

参考記事
https://qiita.com/dawn_628/items/13fa64dc6d600e921ce3
https://qiita.com/publichtml/items/1fba15d8071fab66d043 

0
2
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
2