joinsでの取り出し方について
Q&A
Closed
joinsでうまく取り出せません。
環境
ruby 2.5.1
rails 6.0.3.2
devise 4.7.2
アソシエーション
userモデル
has_many:tags
has_many:group_users
has_many:groups,through: :group_users
group_use中間モデル
belongs_to :group
belongs_to :user
groupモデル
has_many:group_tags
has_many:tags,through: :group_tags
has_many:group_users
has_many:users,through: :group_users
group_tag中間モデル
belongs_to :group
belongs_to :tag
tagモデル
has_many:group_tags,dependent: :destroy
has_many:groups,through: :group_tags
belongs_to:user
maigationファイル内記述を簡単に説明
user
# おそらく今回の件とは関係がないため割愛します。
group_use
t.references :group, foreign_key: true
t.references :user, foreign_key: true
group
# おそらく今回の件とは関係がないため割愛します。
group_tag
t.references :group, foreign_key: true
t.references :tag, foreign_key: true
tag
t.references :user, foreign_key: true
やりたいこと
tags_controller.rb
def index
if user_signed_in?
@groups=Group.joins(:group_users).where(group_users:{user_id:current_user.id})
@tags=Tag.joins(group_tags: :group_users).where(group_users:{user_id:current_user.id})
end
上のrubyコードを御覧ください。まず、
@groupsはcurrent_user.idを利用し、group_usersを介してグループの情報を取得しています。
current_user.id
→ group_user → group_id
→ group
ここは成功しました。
次に
@tagsでcurrent_user.idを利用し、group_users、group_tagsを介してタグの情報を取得しようとしました。
current_user.id
→ group_users → group_id
→ group_tags → tag_id
→ tags
これに失敗しました。
current_userが所属するgroupが所有するtagをすべて取得したいと考えておりますがうまくいきません。
N+1問題対策のため、なるべくjoinを使用して解決したいです。
どなたかわかる方がいらっしゃいましたら、ご教授いただけたら幸いです。
誠に申し訳ありませんが、よろしくお願いいたします。
0