-2

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

一个家庭是一个有几个邻居的对象,我想计算一组家庭中的邻居总数。我有一系列家庭 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

我该怎么做 - 方法很好,或者最好的方法的推荐很好

4

3 回答 3

0

假设 Neighbor 模型中有family_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
于 2013-07-25T12:45:11.007 回答
0

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

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

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

于 2013-07-25T12:53:01.203 回答
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}}
于 2013-07-25T13:19:19.593 回答