やさしい図解で学ぶ　モデル　マイグレーション  その１



<font color="red";>Rails<font color="black";>においてテーブル作成に必要なモデルとマイグレーションの基本をかんたんに解説しています。
## ⭐️テーブル作成に必要なファイル

これから作成するアプリケーションのDB設計がある程度終わったら、データを保存するテーブルをDB上に作成します。

その際、必要なファイルが

<font color="red";>「DBのデータを取り扱うファイル　<font color="black";>=  <font color="magenta";>**モデル**」<font color="black";>と
<font color="red";>「テーブルの設計図となるファイル　<font color="black";>= <font color="navy";>**マイグレーション**」<font color="black";>です。


<img width="550" alt="スクリーンショット 2019-11-21 18.54.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/28a198ed-67ec-37ac-5d93-b0d0cc9e718d.png">

## ⭐️作成するアプリの仕様を確認

仮に「オンラインで学べるプログラミングスクール」を製作しているとします。

<img width="505" alt="スクリーンショット.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/cd91ade8-971a-2138-51b8-2bdc95951566.png">

基本機能

**・ユーザー登録できる**
**・ユーザーはプログラミングコースを複数選択可能**



## ⭐️作成するテーブルをイメージ
 **ひとまずDB上に作るテーブルは3つ**

<img width="632" alt="スクリーンショット 2019-11-.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/75529567-2d15-bbdb-afc6-28ea548e9017.png">

**①　usersテーブル**
**②　coursesテーブル**
**③　course_usersテーブル　（①と②の中間テーブル）**


＊中間テーブルについてまだよくわからない方は　[こちら](https://qiita.com/ramuneru/items/db43589551dd0c00fef9)

## ⭐️作成コマンド

DBとのやりとりを担うモデルファイルは**ターミナル**を用いて作成します。

<img width="704" alt="スクリーンショット 2019-11-.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/df2ca28e-0bcc-38b1-a88d-17dbdef63c84.png">

ちなみにモデルファイル名は**単数形**で実行します。

usersテーブル用のモデルなら 「 rails g model user 」
coursesテーブル用なら 「 rails g model course 」

```code:terminal
    例)
    $ rails g model user          ユーザーのモデルファイル作成
    $ rails g model course        コースのモデルファイル作成 
```

Railsでは**rails g model コマンド**を実行するだけでそれに付随するの<font color="blue";>**マイグレーションファイル**<font color="black";>も同時作成してくれます。

<img width="367" alt="スクリーンショット.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/14990bd0-eb97-994e-5d20-f4287166891d.png">


それでは例としてまずrails g model userを実行した結果を見てみましょう。

<img width="539" alt="スクリーンショット 2019-11-22 12.02.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/fecd68eb-fbcf-6f7a-8462-304e197d777e.png">

上の画像は実行結果です。

数字の書かれたファイルが**<font color="navy";>マイグレーションファイル**
<font color="black";>その下の行のuser.rbとあるのが**<font color="magenta";>モデルファイル**<font color="black";>です。

このコマンドで作成された各ファイルの中身は以下になります。


<img width="617" alt="スクリーンショット 2019-11-22 12.47.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/f896e867-1cfc-9645-a527-da2c45a8267b.png">

 **＊この時点でテーブルはまだ作られておりません。
イメージとしては設計図を書く下図を用意したようなイメージです。**


## 🌟カラムの名前と型
無事に作成できましたが、今はほとんど空っぽの状態なのでここから必要事項を記入していきます。

まずはテーブルの設計図となる**<font color="navy";>マイグレーションファイル**<font color="black";>に
**<font color="red";>「カラムの名前と型」**<font color="black";>を記述していきます。

「名前」に関してはある程度、任意で決められます。
一方、**<font color="red";>「型」**というのはカラムの中にどんな種類の値が入るのかを事前に決めなければいけません。

以下は主に使う基本的なもののみ。(*他にもカラム型の種類は複数存在します。)


<img width="513" alt="スクリーンショット 2019-11-22 15.20.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/0954f3c3-0088-1259-fe68-63c549e0c463.png">




使用例はこちら
<img width="517" alt="スクリーンショット 2019-11-22 15.24.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/a1db2d47-521c-feee-78ea-58855fa14e07.png">

実際の記述例

**作業ファイル：<font color="navy";>usersテーブルのマイグレーションファイル**
<img width="421" alt="スクリーンショット 2019-11-22 15.11.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/cb0368ba-7bc7-fe96-1273-dbda2a2e31e9.png">

ちなみに
<font color="skyblue";>t<font color="black";>.timestampsというのは標準で備わっているカラムで
・created_at   作成された日時
・updated_at   内容が変更された日時

の2つが自動的に作成されます。

同じように
**rails g model course (coursesテーブル作成)**と　
**rails g model course_users(courseとuserの中間テーブル)**
も実行していきます。

## ⭐️補足：作成コマンド2
さきほどはrails g model をしたあと、マイグレーションファイルを編集しましたが

rails g するときにすでにカラム設定の記述をする方法がありますのでご紹介いたします。
カラム数が少ないテーブルなどはこの方法が便利です。

coursesテーブルをこの方法で作成してみました。

<img width="846" alt="スクリーンショット 2019-11-22 15.44.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/5e6baa8c-f54f-3865-f115-3e098dd11180.png">

マイグレーションファイルを開くとすでに
**t.string   :language**
という記述が記載されています。

## ⭐️削除コマンド
モデルの名前やスペルを誤った際など、rails g したあとすぐに気づいた場合は、削除して作り直すこともできます。

<img width="575" alt="スクリーンショット 2019-11-22 16.00.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/7b7c0923-b56a-4d95-e943-158c3a804798.png">

こちらを実行するとモデルファイル、マイグレーションファイル等々、rails g model...で作成したものは削除してくれます。

＊このあと、テーブルを実際にDBに作成する実行コマンド(bundle exec rake db:migrate)というがありますのでそのコマンドを実行する前でしたら簡単に削除できますので、ご活用ください。



## ⭐️外部キーのカラムの設定方法

中間テーブルは外部キー(他のテーブルの主キー（id）)を２つ持っています。


外部キーをカラムに設定する方法はいくつかありますが、ひとまず「　**<font color="green";>references 型**　」を覚えましょう。

<img width="471" alt="スクリーンショット 2019-11-22 18.12.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/b2181df6-417d-55fe-dc18-b03806e87983.png">


実際に記述すると以下のようになります。

作業ファイル：<font color="green";>中間テーブルのマイグレーションファイル
<img width="457" alt="スクリーンショット 2019-11-22 15.57.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/a2b2add4-c226-53cd-fd94-63e90835c252.png">

## ⭐️DBにテーブルを作成するコマンド

実はモデルファイルやマイグレーションファイルを作成しただけではDBにテーブルは作られません。
以下の**コマンド**を実行することで初めてDBにテーブルが作成されます。

<img width="685" alt="スクリーンショット 2019-12-03 11.44.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513524/07c199c7-1a0a-84b6-220c-c4aed014fb09.png">


現段階で考えうるカラムの構成ができたら、このコマンドを実行します。
（記載していませんがカラムの追加、削除、変更はそれ専用のマイグレーションファイルを書いて実行することで反映されます。）



### to be continued
少し長くなってしまったのでつづきの記事を随時作成します。

次回は各テーブルとのアソシエーション(関連性など)を<font color="magenta";>モデルファイル<font color="black";>に記述する方法について学びます。

つづきはこちら
[やさしい図解で学ぶ　モデル　マイグレーション  その2](https://qiita.com/ramuneru/items/e6adbef8445a59b62480)