Ruby on Rails计算对象内的对象

时间:2013-07-14 21:27:11

标签: ruby-on-rails ruby

我有以下查询,用于计算每个家庭每个月向我的代理机构进行的访问次数

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

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

但是每个家庭在一个单独的模型中有很多邻居所以:household.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

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

1 个答案:

答案 0 :(得分: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%的。