2015-11-19 54 views
0

我有一個擁有多個孩子的父母的列表,每個孩子擁有一個且只有一個技能。父母與孩子有多對多的關係,孩子可以擁有相同的技能。計算來自where子句活動記錄的聯想

我想獲得所有家長的列表,並添加一個他們有一個特定的技能,他們有多少孩子的計數字段。這是可能的活動記錄?

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

然而,這並不與CHILD_COUNT計數0返回的父母。有沒有辦法通過Active Record來實現這一點?我想爲每個父母返回JSON,並計算他們的孩子有多少具有特定技能。

回答

0

.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")