⭐️モデルについて
モデルファイルとは
DBとのデータのやりとりをするために重要なファイルとイメージしてください。
モデル(テーブル)間の関係性を明示したり、
DBにあるテーブルに直接データの保存、呼び出しを可能にする機能を備えています。
上の図では
モデルからDBへ「ActiveRecord」と書かれたパイプや橋のようなものがあり、userやtweetモデルからDB内の同じ名前のテーブルに伸びています。
*ActiveRecordというのはRailsに標準ライブラリとして採用されているO/Rマッパーのことです。
専門用語を使わず簡単に表現すると
DBとアプリケーションとの 「 橋渡し or 通訳 」
のようなものだと思ってください。
もし、モデルがないと
Railsではプログラミング言語「Ruby」を。
DBでは「SQL」をそれぞれ使っているので、言語の違いからそのままではやりとりができません。
そこで通訳となるモデル(ActiveRecord)の登場です。
Railsではモデルファイル(ActiveRecord)が通訳のようにRuby→SQLに、SQL→Rubyにと自動的に言語を変換してデータベースとのやりとりを円滑に行ってくれているんです。
特に難しい操作せず、whereやfindなどのメソッドを直感的に使ってデータを出し入れできるのもこの通訳さんのおかげです。
⭐️アソシエーション(テーブル間の関連性)
アソシエーションとは、つまり
テーブル同士の関連性のことで、テーブル間にみられる対1や対多などの関係性をモデルファイルに明示しなければいけません。
中間テーブルを含む3つのテーブルがあります。
これらの関係性を各テーブルのモデルファイルに記述していきます。
今回の記述方法は以下の3パターンを使用します。
(そのほかにもhas_oneやhas_and_belongs_to_manyなどがあり、オプションも存在しますが今回はこちらの3つのみ)
belongs_toやhas_oneの場合は単数、
has_manyなどは複数形で記述します。
実際にuserのモデルファイルに記述するとこのようになります。
またそのほかのモデルファイルにもアソシエーションを記述し、
さらにER図のようにイメージして書くとこのような関係性になります。
中間テーブルcourse_usersにはそれぞれ接続されているテーブルの主キー、つまりは、外部キーuser_idとcourse_idを持っていますのでこのような記述となります。
has_many through
中間テーブルと接続しているテーブルのモデルにはそれぞれアソシエーションとして以下のように記述します。
中間テーブルを通ってその先のインスタンスを複数持っていますよという記述になります。
今回も基礎的な部分を図解を用いて記載致しましたので実際の開発ではモデルファイルにもう少し細かく書いていきます。
今回の記事でモデルに関して少しでもイメージが湧いていただけたのなら幸いです。
⭐️補足:belongs_to
belongs_toというのがちょっとわかりづらいと思いますが、考え方としてはテーブル内に外部キーを持っているモデルファイルにはbelongs_toを書くと思ってください。has_oneの場合は外部キーを持っていません。
例えば、
usesテーブルとtweetsテーブルなるものがあり、関係性が図のようだとすると
tweetsテーブルには外部キーであるuser_idを持っているのでusersテーブルと親→子のような関係であるため、belongs_toをモデルファイルに記述しておく。