LoginSignup
14
15

More than 5 years have passed since last update.

RailsでのDBとテーブル作成とカラムのオプションについて

Last updated at Posted at 2018-04-17

ど忘れするので自分用メモ

DB作成

ターミナル
$ rails g db:create

DB削除

ターミナル
$ rails d db:create

モデル作成

基本的にテーブル作成する際はモデルも作成する。

ターミナル
$ rails g model product

モデル削除

ターミナル
$ rails d model product

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

モデルを作成したらマイグレーションファイルも作成される。
マイグレーションファイルを編集することで、テーブルのカラムを作成できる。

マイグレーションファイル
class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|
      t.string      :name, null: false, index: true, unique: true,
      t.integer     :price, default: 100, null: false
      t.text        :info
      t.references  :user
    end
  end
end

説明
t.string→カラムの型を文字列型に指定
name→カラム名を「name」
null: false →「not null制約(nullはNG)」をつける
index: true →インデックスをつける
unique: true →一意制約をつける。
t.integer→カラムの型を数値型に指定
default: 100→初期値(100)を設定
t.text→カラムの型をテキスト型に指定
t.references→自動でuserテーブルの外部キーを作ってくれる。
※随時、出くわすたびに追加予定

マイグレート

マイグレートすることで、マイグレーションファイルを元にテーブルが作成される。

ターミナル
$ bundle exec rake db:migrate

マイグレート取り消し

一つ前のマイグレートした情報がロールバックされる。

ターミナル
$ bundle exec rake db:rollback

カラムの追加

すでに作成(マイグレート)済みのテーブルに対してカラムを追加する。

ターミナル
$ rails g migration AddColumnToProducts count:integer

上記コマンドを実行すると自動でカラム追加のマイグレーションファイルが作成される。

マイグレーションファイル
class AddColumnProducts < ActiveRecord::Migration[5.0]
  def change
    add_column :products, :count, :integer
  end
end
ターミナル
$ bundle exec rake db:migrate

カラムの削除

すでに作成(マイグレート)済みのテーブルに対してカラムを削除する。

ターミナル
$ rails g migration RemoveCountFromProducts count:integer

上記コマンドを実行すると自動でカラム削除のマイグレーションファイルが作成される。

マイグレーションファイル
class RemoveNameFromTweets < ActiveRecord::Migration[5.0]
  def change
    remove_column :products, :name, :string
  end
end
ターミナル
$ bundle exec rake db:migrate

マイグレーションファイル直接修正

マイグレーションファイルを作成し、直接編集する場合

ターミナル
$ rails g migration change
マイグレーションファイル
class Change < ActiveRecord::Migration[5.0]
  def change
    add_column    :products, :name, string   #自分で記述
    remove_column :products, :count, integer #自分で記述
    add_reference :products, :user #外部キー(user_id)を追加
  end
end

上記例だとstring型のnameカラムが作成され、integer型のcountカラムが削除される。

ターミナル
$ bundle exec rake db:migrate
14
15
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
14
15