【发布时间】:2013-01-07 01:54:57
【问题描述】:
我有一个客户模型和一个产品模型,其中一个客户有很多产品,一个产品属于一个客户。
我需要找到一个只有在 Product 表中有记录时才返回客户的查询
客户表
id | name
--------------
1 | Company A
2 | Company B
3 | Company C
产品表
id | name | client_id
---------------------------
1 | Product A | 1
2 | Product B | 1
3 | Product C | 3
4 | Product D | 3
5 | Product E | 1
我只需要客户 1 3
比如
@clients = Client.where("client exists in products") #something to this effect
【问题讨论】:
-
@clients = Client.joins(:products)有效吗?我认为它会做一个 INNER JOIN,这是(我认为)你想要的 -
这是个好问题,我会在控制台测试
-
@pjam 它似乎返回了所有加入客户的产品,因此我最终得到了重复的客户名称。有没有办法将结果限制在客户端?
-
@pjam 例如,我只想要 4 条记录,而不是 214,这是我在 products 表中拥有的产品数量。 214 是这 4 个客户的组合,但我只想退回 4 个客户,而不是那些客户加入的 214 产品。我希望这不会让任何人感到困惑。
-
我得到了你想要的,但查询
Client.joins(:products)正在返回一组客户,对吗?问题是你有重复的条目吗?
标签: ruby-on-rails activerecord active-record-query