多対多の関係のテーブルにて、複数のレコードを条件に複数のレコードを取得したい
Ruby on Railsでイベント検索のシステムを作っています。
Active Recordで効率的にレコードを取得する方法を模索しているのですが、
なかなか思ったように行かずに困っています…
もし助けていただけたら嬉しいです!
概要としては、
ユーザーにタグからイベントを検索してもらうために、
タグ一覧をトップページに表示したいのですが、
Tag.allで全てのタグを表示すると、それに紐づくイベントがない可能性もあるため、
"今募集中のイベント"に紐付く"タグ"だけを取得したいと考えています。
該当のソースコード
Ruby
1def prepare_search 2 @events = Event.where("date >= ?", Date.today) 3 @tags = @events.map{|event| event.tags}.flatten 4end
Ruby
1class Event < ApplicationRecord 2 has_many :event_tags 3 has_many :tags, through: :event_tags 4end
Ruby
1class Tag < ApplicationRecord 2 has_many :event_tags 3 has_many :events, through: :event_tags 4end
Ruby
1class EventTag < ApplicationRecord 2 belongs_to :event 3 belongs_to :tag 4end
試したこと
上記以外でいくつか方法を試してみたのですが、どれもうまく行かずにいます…
Ruby
1@tags = Tag.merge(Event.where(id: @events)) 2@tags = Tag.joins(:events).where("event_id = ?", @events.ids) 3@tags = Tag.includes(:events).where({events: @events})
そもそもの多対多のアソシエーションがどういうSQL文を作るのかをよく理解していないのかもしれません…
補足情報(FW/ツールのバージョンなど)
ruby '2.5.1'
rails '5.2.2'
回答1件
あなたの回答
tips
プレビュー