おーしまブログ

プログラミングやってます

<Ruby on Rails> アソシエーション

こんにちは、おーしまです。

今回はRuby on Railsのアソシエーションについてです。


アソシエーションとは、モデルのテーブル同士で関連を持たせることです。


tweetテーブルとuserテーブルがあった時に、

「このtweetはどのuserがしたものか」

ということを関連づけるということです。



  • 1人のuserは複数のtweetができる
  • 1つのtweetは複数のuserでできない

とした時は


/models/user

has_many :tweets

/models/tweet

belongs_to :user

と記述します。

これで、tweetとuserを関連づける事ができました。


しかし、アソシエーションにはN+1問題というものがあります。



N+1問題とは、アソシエーションを使用した時、データベースへのアクセス回数が多くなってしまう問題です。

例えば、userのtweetを全て一覧表示させる時に、そのuserが100万tweetをしていた場合、
100万回データベースにアクセスしてしまう
ことになってしまうのです。すごくPCが重くなります。


それを解決するのがincludesメソッドです。

<例> tweet.includes(:user)

で使用します。

これでuserが投稿したtweetを全て(100万tweet)1度のアクセスで、持ってくる事ができます。


今回はここまでです。
それでは、また〜

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}