【问题标题】:Count associations from a where clause active record从 where 子句活动记录中计算关联
【发布时间】:2015-11-19 21:44:17
【问题描述】:

我有一份父母名单,他们有很多孩子,每个孩子只有一项技能。父母与孩子是多对多的关系,孩子也可以拥有相同的技能。

我正在尝试获取所有父母的列表,并添加一个计数字段,说明他们有多少具有特定技能的孩子。这可能与活动记录吗?

我当前的解决方案使用这个Parent.joins(:children).select('parents.*, COUNT(*) AS child_count').group('parents.id').where(children: {skill_name: skill})

但是,这不会返回 child_count 计数为 0 的父母。有没有办法用 Active Record 来完成这个?我想为每个父母返回 JSON,计算他们有多少孩子拥有特定技能。

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    .joins(:children) 生成一个 INNER JOIN,它将排除具有 0 个孩子的父母。您应该将其更改为 OUTER JOIN。在大多数情况下,您无法使用 ActiveRecord 执行此操作(除非您也想执行预加载)。假设您的连接表名为parents_children,那么您可以自己构建连接:

    .joins("LEFT OUTER JOIN parents_children ON parents_children.parent_id = parents.id INNER JOIN children ON parents_children.child_id = children.id")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多