📑

アソシエーション

2021/01/17に公開

アソシエーション
アソシエーションとは、モデルを利用したテーブル同士の関連付けのこと。アソシエーションをモデルに定義することで、そのモデルに紐づく別のモデルの情報へアクセスできるようになる。

has_manyメソッド
他のモデルとの間に「1対多」のつながりがあることを示す。

belongs_toメソッド
他のモデルとの間に「1対1」のつながりがあることを示す。

N+1問題
N+1問題とは、アソシエーションを利用した場合に限り、データベースへのアクセス回数が多くなってしまう問題。これはアプリケーションのパフォーマンス低下につながる。
ex)
通常、Tweet.allなどでデータを取得する際は、1度のアクセスで済む。しかし、ツイートが複数存在する一覧画面に、それぞれユーザー名を表示するケースを考えてみる。
この場合、tweetsに関連するusersの情報の取得に、ツイート数と同じ回数のアクセスが必要になる。1億ツイートあれば、1億回以上アクセスすることになり、アプリケーションのパフォーマンスが著しく下がることになる。

includesメソッド
includesメソッドは、引数に指定された関連モデルを1度のアクセスでまとめて取得できる。

モデル名.includes(:紐付くモデル名(ex):user))

Discussion