Help us understand the problem. What is going on with this article?

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

⭐️モデルについて

モデルファイルとは
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をモデルファイルに記述しておく。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした