未分類

[Rails]テーブル作成のあれやこれ

 

今回は、Railsにおけるテーブルの作成方法について見ていきます。

この記事を読むことで、Railsでテーブルを作成する一通りの知識がつくと思います。

現在、Railsの学習を始めた方や現場に配属されたばかりの方の参考になれば幸いです。

テーブルの作成

まず、最初にユーザー(user)テーブルを作成していきます。

テーブルの作成はターミナルで行います。基本的にはこのように定義します。

$ rails model モデル名 属性名1: データ型 属性名2: データ型

 

モデル名以降の属性名やデータ型については、このコマンドの後にテキストエディタ上で追加・変更することができますが、Railsが自動で設定してくれるので間違いを犯さないためにも定義する時点で書いておくほうが良いでしょう。

それでは実際に作成してみます。

$ rails g model user name:string age:integer email:string  

属性値とデータ型はくっつけて書いてください。

このコマンドを実行すると、下記ファイルが作成されると思います。

      invoke  active_record
      create    db/migrate/20211101082706_create_users.rb - ①
      create    app/models/user.rb - ②
      invoke    test_unit
      create      test/models/user_test.rb - ③
      create      test/fixtures/users.yml  - ④

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

②モデルのクラスファイル

③モデルのテストファイル

④モデルのテストデータを作成する際に使用するfixtureファイル

これが作成されたマイグレーションファイルになります。

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.integer :age
      t.string :email

      t.timestamps
    end
  end
end

 

tableを作成したときに、カラムに対してコメントをつけることもできます。

これを行うことで、共同開発を行う時にメンバーが何をするカラムなのかがイメージつきやすくなるというメリットがあります。

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name, comment: '名前'
      t.integer :age, comment: '年齢'
      t.string :email, comment: 'メールアドレス'

      t.timestamps
    end
  end
end

データ型の種類について

次にテーブルを作成する際に、指定出来るデータ型の種類について解説します。

string文字列(255文字未満)
text長い文字列(255文字以上)
integer整数
float浮動小数
decimal精度の高い小数
datetime日時
timestampタイムスタンプ
time時間
date日付
booleanboolean 

赤文字で書いたものがよく使われます。

booleanには真偽値であるtrue 、falseが入ります。

timestampは、デフォルトでcreated_atとupdated_atが入るようになっています。

これらをデフォルトで設定しない場合はこのように書きます。

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :string
      t.string :age
      t.string :integer
      t.string :email
      t.string :string

      # t.timestamps 削除する
      t.datetime :created_at, null: false
    end
  end
end

 

このように記述することで、updated_atがデフォルトで作成されないようになります。

テーブルのデータ制約について

今回は主に使われる4つの制約について解説していきます。

  • NOT NULL制約
  • 一意性制約
  • 主キー制約
  • 外部キー制約

NOT NULL制約

NOT NULL制約は、特定のテーブルの属性値にNULL(空の値)が入ることを許さない制約です。

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name, null: false  #nameが空の値だと、レコードは保存できない
      t.integer :age
      t.string :email

      t.timestamps
    end
  end
end

 

一意性制約

一意性制約は、テーブル内で重複するデータを禁止する制約です。

同一カラムに同じ値が入ることを禁止します。

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.integer :age
      t.string :email, unique: true  #同じemailの値は保存できない

      t.timestamps
    end
  end
end

 

主キー制約

主キー制約については、主キーである属性値が必ず存在し、尚且つ重複していないことを保証する制約です。主キーは最初からRailsでテーブルを作成すると、実装されるので、今回コードは割愛します。

外部キー制約

外部キー制約は、親元の主キーを外部キーとして持っているテーブルのレコードが作成された際に、外部キーが必ず存在していなくてはいけないという制約のことを指します。

実際に新しくテーブルを作成してみようと思います。

今回はユーザーが投稿することができるBoardsテーブルを作成し、ユーザーのIDを外部キーとして持つようにしてみます。

モデル名:references としてやることで、その作成するテーブル外部キー制約が付与されます。

$ rails g model board title:string content:text user:references

 

を実行すると、ユーザーを外部キーともつマイグレーションファイルが作成されます。

class CreateBoards < ActiveRecord::Migration[6.1]
  def change
    create_table :boards do |t|
      t.string :title
      t.text :content
      t.references :user, null: false, foreign_key: true #外部キー制約

      t.timestamps
    end
  end
end

 

マイグレーションファイルの実行

$ rails db:migrate

 

このコマンドを実行することで、マイグレーションファイルが読み込まれて、DBにテーブルが反映されます。

テーブルのカラムの追加・削除について

$ rails g migration クラス名  カラム名:データ型

 

ユーザーテーブルに、サムネイル画像を保存するためのカラムを作成してみます。

  • テーブルのカラム追加
$ rails g migration AddThumbnailToUsers thumbnail:string

マイグレーションファイルを確認すると、このように書かれていると思います。

class AddThumbnailToUsers < ActiveRecord::Migration[6.1]
  def change
    add_column :users, :thumbnail, :string
  end
end

 

  • テーブルのカラム削除
$ rails g migration RemoveAgeToUsers age:integer

 

class RemoveAgeToUsers < ActiveRecord::Migration[6.1]
  def change
    remove_column :users, :age, :integer
  end
end

ファイルの修正が完了したら、同様に $ rails db:migrateを行ってください。

その他コマンドについて

  • マイグレーションの状態を確認する

statusがupになっていれば、反映されており、downになっていれば、rails db:migrateを実行して反映させてください。

$ rails db:migrate:status

 

  • データベースを初期化する
$ rails db:migrate:reset

 

  • db/seeds/rbに書かれてあるダミーデータをデータベースに取り込む
$ rails db:seed

 

今回はデータベースの作成をやっていきました。

次回は開発環境でデータベースにテストデータとして、データを注入するやり方についてのブログを書いていこうと思います。

お疲れ様でした!

ABOUT ME
YasuharaKenta
社会人3年目の年になります。2年間専門商社の営業として従事し、現在は都内でWebエンジニアとして働いています。 新人エンジニアとしてわからないことなどを、分かりやすくブログにまとめれるように頑張っていきます!!
株式会社Playgroundのサービス
  • 無料・簡単・片手でホームページを作成できる自社サービス Rakwi
  • Web制作とアプリ開発を学べるオンラインプログラミング講座 Upstairs
  • 開発,DX推進支援サービス スタートアッププラン

COMMENT

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

CAPTCHA