joinsでうまく取り出せません。
環境
ruby 2.5.1
rails 6.0.3.2
devise 4.7.2
アソシエーション
ruby
1userモデル 2 3 has_many:tags 4 has_many:group_users 5 has_many:groups,through: :group_users
ruby
1group_use中間モデル 2 3 belongs_to :group 4 belongs_to :user
ruby
1groupモデル 2 3 has_many:group_tags 4 has_many:tags,through: :group_tags 5 has_many:group_users 6 has_many:users,through: :group_users
ruby
1group_tag中間モデル 2 3 belongs_to :group 4 belongs_to :tag
ruby
1tagモデル 2 3 has_many:group_tags,dependent: :destroy 4 has_many:groups,through: :group_tags 5 belongs_to:user
maigationファイル内記述を簡単に説明
ruby
1user 2 3 # おそらく今回の件とは関係がないため割愛します。
ruby
1group_use 2 3 t.references :group, foreign_key: true 4 t.references :user, foreign_key: true
ruby
1group 2 3 # おそらく今回の件とは関係がないため割愛します。
ruby
1group_tag 2 3 t.references :group, foreign_key: true 4 t.references :tag, foreign_key: true
ruby
1tag 2 3 t.references :user, foreign_key: true
やりたいこと
ruby
1tags_controller.rb 2 3 def index 4 if user_signed_in? 5 @groups=Group.joins(:group_users).where(group_users:{user_id:current_user.id}) 6 @tags=Tag.joins(group_tags: :group_users).where(group_users:{user_id:current_user.id}) 7 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を使用して解決したいです。
どなたかわかる方がいらっしゃいましたら、ご教授いただけたら幸いです。
誠に申し訳ありませんが、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー