10
16

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 3 years have passed since last update.

【Rails】マイグレーションコマンドまとめ

Last updated at Posted at 2020-06-01

開発環境

・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

マイグレーションコマンドの書き方

$ rails g migration ChangeColumnToBooks は、
$ rails generation migration change_column_to_books と書くのと同じ。

つまり、generationgと略す事ができ、
AddBodyToBooksの様に、単語の先頭を大文字にする事で「 _ 」を書く手間が省ける。

基本コマンド

1.モデルとテーブルを作成

$ rails g model モデル名 カラム名:型名

ターミナル
$ rails g model Book title:string
migrate/~_create_books.rb
class CreateBooks < ActiveRecord::Migration[5.2]
  def change
    create_table :books do |t|
      t.string :title

      t.timestamps
    end
  end
end

2.モデルとテーブルを削除

rails d model モデル名

ターミナル
$ rails d model Book

3.マイグレーションを実行

ターミナル
$ rails db:migrate

4.マイグレーションの内容を戻す

①1ステップ前に戻る場合

ターミナル
$ rails db:rollback

①複数ステップ前に戻る場合

ターミナル
$ rails db:rollback STEP=5 # 数字は自由に変更可能

4.マイグレーションのステータス確認

ターミナル
rails db:migrate:status

テーブル関係

1.テーブルのみを削除

$ rails g migration Dropテーブル名

ターミナル
$ rails g migration DropBooks
migrate/~_drop_books.rb
class DropBooks < ActiveRecord::Migration[5.2]
  def change
    drop_table :books # 追記
  end
end

2.テーブル名を変更

$ rails g migration Rename変更前のテーブル名To変更後のテーブル名

ターミナル
$ rails g migration RenameBooksToArticles
migrate/~_rename_books_to_articles.rb
class RenameBooksToArticles < ActiveRecord::Migration[5.2]
  def change
    rename_table :books, :articles # 追記
  end
end

カラム関係

1.カラムを追加

①単体

$ rails g migration Addカラム名Toテーブル名 カラム名:型名

ターミナル
$ rails g migration AddBodyToBooks body:text
migrate/~_add_body_to_books.rb
class AddBodyToBooks < ActiveRecord::Migration[5.2]
  def change
    add_column :books, :body, :text
  end
end

②複数

$ rails g migration AddColumnsToテーブル名 カラム名:型名 カラム名:型名 カラム名:型名

ターミナル
$ rails g migration AddColumnsToBooks body:text introduction:text price:integer
migrate/~_add_columns_to_books.rb
class AddColumnsToBooks < ActiveRecord::Migration[5.2]
  def change
    add_column :books, :body, :text
    add_column :books, :introduction, :text
    add_column :books, :price, :integer
  end
end

2.カラムを削除

①単体

$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名

ターミナル
$ rails g migration RemoveTitleFromBooks title:string
migrate/~_remove_title_from_books.rb
class RemoveTitleFromBooks < ActiveRecord::Migration[5.2]
  def change
    remove_column :books, :title, :string
  end
end

②複数

$ rails g migration RemoveColumnsFromテーブル名 カラム名:型名 カラム名:型名 カラム名:型名

ターミナル
$ rails g migration RemoveColumnsFromBooks body:text introduction:text price:integer
migrate/~_remove_columns_from_books.rb
class RemoveColumnsFromBooks < ActiveRecord::Migration[5.2]
  def change
    remove_column :books, :body, :text
    remove_column :books, :introduction, :text
    remove_column :books, :price, :integer
  end
end

3.カラムのデータ型を変更

$ rails g migration ChangeDataカラム名Toテーブル名 カラム名:型名

ターミナル
$ rails g migration ChangeDataTitleToBooks
migrate/~_change_data_title_to_books.rb
class ChangeDataTitleToBooks < ActiveRecord::Migration[5.2]
  def change
    change_column :books, :title, :text # 追記
  end
end

4.カラムのオプションを追加

$ rails g migration ChangeOptionカラム名Toテーブル名 カラム名:型名

ターミナル
$ rails g migration ChangeOptionTitleToBooks
migrate/~_change_option_title_to_books.rb
class ChangeOptionTitleToBook < ActiveRecord::Migration[5.2]
  def change
    change_column :books, :title, :string, null: false # 追記
  end
end

5.データ型一覧

型名 役割
string 短い文字列
text 長い文字列
integer 整数
float 浮動少数
decimal 精度の高い少数
datetime 日時
timestamp タイムスタンプ
time 時間
date 日付
binary バイナリ文字列
boolean 真偽値

6.よく使うオプション

オプション名 役割
default 初期値を設定
null 空欄の真偽
limit 長さを制限
unique 一意制約を付与
unique インデックスを付与
10
16
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
10
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?