我在 Items
和 Categories
之间有很多与众不同的关系。
我试图以下一格式删除属于每个类别的项目数: [category.id, <number of items>]
这是我到目前为止所拥有的:
Category.joins(:items).select('id, count(id) as quantity')
但行不通。谁能帮我指向正确的方向?
有多个问题:
-
id, count(id) as quantity
是模棱两可的,categories.id, count(items.id) as quantity
更好 -
joins
产生INNER JOIN
,但您可能要使用LEFT OUTER JOIN
- 未指定
GROUP BY
对于Ruby on Rails> = 5您使用:
categories = Category.select('categories.id, count(items.id) as quantity').
left_outer_joins(:items).
group(:id)
category = categories.first
category.id #=> 12
category.quantity #=> 34
对于Ruby在Rails&lt上;5您用:
替换left_outer_joins(:items)
joins('left outer join items on items.category_id = categories.id')
关于to_sql
知道您可以在Relation
上调用to_sql
以查看将要运行的SQL可能会有所帮助。如果您针对您的代码进行调用,则会看到:
select id,
count(id) as quantity
from `categories`
inner join `items` ON `items`.`category_id` = `categories`.`id`
这没什么意义。这是应用更改后我们得到的:
select categories.id,
count(items.id) as quantity
from `categories`
left outer join `items` ON `items`.`category_id` = `categories`.`id`
group by `categories`.`id`