2013-07-14 34 views
0

我有以下查询计数一个家庭每个月使得访问数量来我社Ruby on Rails的统计对象中的对象

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

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

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

换句话说,我想计算总邻居数所有的h在特定月份访问ouseholds和他们的年龄:

在我的邻居模型我有范围为我的年龄组:

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 

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

回答

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%。

+0

我同意这是一个不清楚的问题,所以我澄清它 - 希望这可以帮助 – tbrooke

+0

我认为答案是将查询翻转到像neighbors.where(:h_id =>:houshold_id).young之类的邻居查询。计数 – tbrooke