计算父对象数组中的关联对象

时间:2013-07-25 12:40:12

标签: ruby-on-rails ruby

我正在编写一份报告,计算一个家庭中的邻居 - 我正在考虑使用辅助方法,简单查询或两者兼而有之

家庭是一个拥有多个邻居的对象,我想计算一组选定家庭中的邻居总数。我有一系列住户ID:

@household_ids = [31, 15, 30, 38, 1, 5, 32, 25, 10, 26, 14,29]

我试过了:

def household_neighbor_count(houses)
   houses.each  do |id| 
   @neigh  = Household.find(id).neighbor_count
   @neigh
  end
end

哪个不起作用 - 它会返回ID列表

因为这是Rails我也可以做一个activerecord查询,这是我在伪sql中的镜头:

 Neighbors where household_id == household_id in @household-ids

如果有帮助,我正在使用squeel

我如何做到这一点 - 方法很好或者推荐最好的方法很好

3 个答案:

答案 0 :(得分:0)

假设邻居模型中有household_id

@household_ids = [31, 15, 30, 38, 1, 5, 32, 25, 10, 26, 14,29]
total_number_of_neighbors = Neighbor.where('household_id IN (?)', @household_ids).count

答案 1 :(得分:0)

目前还不清楚你要做什么,但我想这就是你想要的:

houses.map{|id| Household.find(id).neighbor_count}.inject(:+)

如果房屋中的邻居之间存在重复,那么您需要一种方法来获取给定房屋的邻居集合,而不仅仅是计数。而且由于你没有展示这种方法,我想这不是问题,或者你的问题不合适。

答案 2 :(得分:0)

试试这个

Household.includes(:neighbors).select('households.id, neighbors.id').where(:id => [31, 15, 30, 38, 1, 5, 32, 25, 10, 26, 14,29]).map{|r| {r.id =>  r.neighbors.count}}