使用具有多个条件的联接查询

时间:2014-11-11 12:01:20

标签: ruby-on-rails postgresql ruby-on-rails-4

我有一个查询,它应该根据某些条件获取类别名称。每个类别都有许多子类别,每个子类别都有提供者。我想只显示带有子类别的类别,其中提供者的数量是正数。所以目前我这样做:

控制器

@categories = Category.with_providers

模型:

Category.joins(subcategories: [:service_providers]).uniq

根据我的任务我现在需要显示的只是service_providers计数大于0 的类别至少有一个提供商已发布:true 属性

我的遗留问题是类别与service_providers无关。

类别包含子类别 子类别有服务提供商

通过在Category to Provider关系上建立直通连接可以很快解决这个问题,但由于我已经花了一些时间尝试在我的初始问题上写一个正确的查询,我想知道答案。

1 个答案:

答案 0 :(得分:2)

您不需要检查条件service_providers count is more than 0,因为joins会应用INNER JOIN。你需要做的是:

Category.joins(subcategories: [:service_providers]).where(service_providers: {published: true})