私は人々のテーブルを持っています。イベントの表もあります。各イベントには複数のショーがあります(各ショーには複数のチケットがあり、各チケットにはバイヤー(人)がいる場合とない場合があります)。ただし、各人は異なるイベントへの複数のチケットを持つことができます。
私の現在の試みは次のようになります。
Person.joins(tickets: {shows: :events}).where("events.id" => 1)
そして、次のSQLを生成します。
SELECT *
FROM "people"
INNER JOIN "tickets"
ON "tickets"."buyer_id" = "people"."id"
INNER JOIN "shows"
ON "shows"."id" = "tickets"."show_id"
INNER JOIN "events"
ON "events"."id" = "shows"."event_id"
WHERE
"events"."id" = 1;
しかし、私の理解では、クエリは各人に対して1つのチケットしか返しません。自分の参加についてはよくわかりませんが、すべてのチケットを表示する(したがってすべてのイベントを表示する)には、人とチケットの間に適切な外部結合が必要であると考えるのが安全です。これは正しいです?そして、それをActiveRecord / Arelに実装するにはどうすればよいですか?
特定のイベントのチケットを持っているすべての人を見つけるにはどうすればよいですか?