以下のようにUserとTagが多対多関連になっているテーブル(モデル)があるとします。
その中間テーブルをUserTagとします
テーブル
User
・user_id
・name
UserTag
・user_tag_id
・user_id
・tag_id
Tag
・tag_id
・name
モデル class User< ActiveRecord::Base has_many :user_tags has_many :tags, through: :user_tags end class Tag< ActiveRecord::Base has_many :user_tags has_many :users, through: :user_tags end class UserTag< ActiveRecord::Base belongs_to :user belongs_to :tag end
この時Userに関連したTagテーブルの名前を取りたかったので取り方を調べていたのですが、
以下のようにincludesを使用しているパターンとしていないパターンがあるようです。
includesあり
includesなし
includesありのパターンをこのテーブルに照らし合わせると
User.includes(:tags)
のようにしてuserにとって多対多関連になっているtagのカラムを取得していると思いますが、
includesなしの例を見ますと
#controller @user = User.find(params[:id]) #view - @user.user_tags do |usertag| = usertag.tags.name
と特にincludesをせずに、多対多関連先のカラムを取得できているように見えます。
今まで特に考えず1対多でも多対多でもmodelでhas_manyのようなリレーションメソッドを指定し、
関連テーブルに対してincludesしていたのですが、しっかりリレーションメソッドを書いていれば
includesメソッドを使用しなくても関連テーブルのカラムが取得できるということなのでしょうか?
調べてみても良く分からなかった為質問しました。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー