Cli*_*udy 3 sql activerecord join ruby-on-rails
我有一张桌子.我还有一张事件表; 每个活动都有多个节目(每个节目都有多张票,每张票可能有也可能没有买家(一个人).每个人可以拥有多张不同活动的门票.
我目前的尝试看起来像这样:
Person.joins(tickets: {shows: :events}).where("events.id" => 1)
Run Code Online (Sandbox Code Playgroud)
它会生成以下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;
Run Code Online (Sandbox Code Playgroud)
但我的理解是,查询只会为每个人返回一张票.我不太了解我的联接,但是可以安全地假设我需要在人和票之间进行正确的外连接,以便显示每张票(因此每个事件都代表).它是否正确?我如何在ActiveRecord/Arel中实现THAT?
如何查找所有拥有特定活动门票的人?
我也不是数据库专家,但据我所知,这是它的工作方式:
我想这就是你要找的东西.
顺便说一句,上面代码中的命名约定表明您可能对关系的定义有问题.我希望它是:
Person.joins(tickets: {show: :event}) 并不是
Person.joins(tickets: {shows: :events})因为票证属于单个节目并且显示属于单个事件.我错过了什么吗?