我有一桌人。我还有一张活动表;每个活动都有多个节目(,每个节目有多个门票,每张门票可能有也可能没有买家(一个人)。但是,每个人都可以拥有多张不同活动的门票。
我目前的尝试如下所示:
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;
但我的理解是,查询只会为每个人返回一张票。我不太了解我的加入,但可以安全地假设我需要人和票之间的正确外部加入,以便显示每张票(因此代表每个事件)。这个对吗?以及如何在 ActiveRecord/Arel 中实现它?
如何找到所有持有特定活动门票的人?