LoginSignup
8
6

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-29

⭐️モデルについて

モデルファイルとは
DBとのデータのやりとりをするために重要なファイルとイメージしてください。

モデル(テーブル)間の関係性を明示したり、
DBにあるテーブルに直接データの保存、呼び出しを可能にする機能を備えています。

スクリーンショット 2019-11-27 18.11.52.png

上の図では
モデルからDBへ「ActiveRecord」と書かれたパイプや橋のようなものがあり、userやtweetモデルからDB内の同じ名前のテーブルに伸びています。

*ActiveRecordというのはRailsに標準ライブラリとして採用されているO/Rマッパーのことです。

専門用語を使わず簡単に表現すると

DBとアプリケーションとの 「 橋渡し  or  通訳 」

のようなものだと思ってください。

もし、モデルがないと

スクリーンショット 2019-11-28 12.06.15.png

Railsではプログラミング言語「Ruby」を。
DBでは「SQL」をそれぞれ使っているので、言語の違いからそのままではやりとりができません。

そこで通訳となるモデル(ActiveRecord)の登場です。
スクリーンショット 2019-12-03 12.17.09.png

スクリーンショット 2019-11-28 12.44.47.png

Railsではモデルファイル(ActiveRecord)が通訳のようにRuby→SQLに、SQL→Rubyにと自動的に言語を変換してデータベースとのやりとりを円滑に行ってくれているんです。

特に難しい操作せず、whereやfindなどのメソッドを直感的に使ってデータを出し入れできるのもこの通訳さんのおかげです。

⭐️アソシエーション(テーブル間の関連性)

アソシエーションとは、つまり
テーブル同士の関連性のことで、テーブル間にみられる対1や対多などの関係性をモデルファイルに明示しなければいけません。

例えば下のER図の場合
スクリーンショット 2019-11-19 15.42.33.png

中間テーブルを含む3つのテーブルがあります。
これらの関係性を各テーブルのモデルファイルに記述していきます。

今回の記述方法は以下の3パターンを使用します。
(そのほかにもhas_oneやhas_and_belongs_to_manyなどがあり、オプションも存在しますが今回はこちらの3つのみ)

スクリーンショット 2019-11-25 12.22.31.png

記述方法は
スクリーンショット 2019-11-29 11.15.56.png

belongs_toやhas_oneの場合は単数、
has_manyなどは複数形で記述します。

実際にuserのモデルファイルに記述するとこのようになります。
スクリーンショット 2019-11-27 18.34.37.png

またそのほかのモデルファイルにもアソシエーションを記述し、
さらにER図のようにイメージして書くとこのような関係性になります。

スクリーンショット 2019-11-25 11.53.03.png

中間テーブルcourse_usersにはそれぞれ接続されているテーブルの主キー、つまりは、外部キーuser_idcourse_idを持っていますのでこのような記述となります。

has_many through

中間テーブルと接続しているテーブルのモデルにはそれぞれアソシエーションとして以下のように記述します。
スクリーンショット 2019-11-29 13.42.13.png

中間テーブルを通ってその先のインスタンスを複数持っていますよという記述になります。

今回も基礎的な部分を図解を用いて記載致しましたので実際の開発ではモデルファイルにもう少し細かく書いていきます。

今回の記事でモデルに関して少しでもイメージが湧いていただけたのなら幸いです。

⭐️補足:belongs_to

belongs_toというのがちょっとわかりづらいと思いますが、考え方としてはテーブル内に外部キーを持っているモデルファイルにはbelongs_toを書くと思ってください。has_oneの場合は外部キーを持っていません。

例えば、
usesテーブルとtweetsテーブルなるものがあり、関係性が図のようだとすると

スクリーンショット 2019-11-29 12.16.40.png

tweetsテーブルには外部キーであるuser_idを持っているのでusersテーブルと親→子のような関係であるため、belongs_toをモデルファイルに記述しておく。

8
6
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
8
6