0

我有以下查询,计算一个家庭每月访问我的代理机构的次数

visits.by_month(@month).select("DISTINCT(household_id)").count

这将返回每月访问的家庭数量

但是每个家庭在一个单独的模型中有许多邻居,所以:family.neighbors.count 给了我家庭中的邻居数,但我想要所有家庭的所有邻居

换句话说,我想要计算在特定月份访问过的所有家庭的邻居总数及其年龄:

在我的邻居模型中,我有适合我年龄组的范围:

scope :young, where( 'age < 19')
scope :middle, where('age > 18 && age < 66')
scope :old, where('age > 65')

如何按年龄组返回每月访问的邻居数量?:

或者:

Jones Household   {Bob: 14, Sally: 30, Stan: 80}
Smith Household {Ben: 30, Sue 15}

Total Households   2
Total Neighbors served: 5 
Total Young Neighbors:  2
Total Middle Neighbors: 2
Total Old Neighbors:    1

我从这个开始,但这是错误的:

visits.by_month(@month).select("DISTINCT(household_id)").each.neighbors.count

关于如何做到这一点的任何想法?

4

1 回答 1

0

我不确定我是否完全理解这个问题,但是这个怎么样:

# get an array of all distinct household IDs for that month
household_ids = visits.by_month(@month).pluck(:household_id).uniq

household_ids.each do |h_id|
  young_count  = visits.by_month(@month).where(:household_id=>h_id).young.count
  middle_count = visits.by_month(@month).where(:household_id=>h_id).middle.count
  old_count    = visits.by_month(@month).where(:household_id=>h_id).old.count
  puts "Number of young people visiting from household: #{h_id} is #{young_count}"
end

如果这不是您所期望的,也许粘贴更多的模型代码可能会有所帮助。我不认为我对你期望的结果是 100% 的。

于 2013-07-14T23:47:41.887 回答