2013-07-14 3 views
0

У меня есть следующий запрос, который подсчитывает количество посещений домохозяйства делает каждый месяц в мое агентствоРубин на Rails подсчет объектов в пределах объектов

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

Это возвращает число домохозяйств, приезжает каждый месяц

Но у каждого домохозяйства есть много соседей в отдельной модели, поэтому: hous.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

Смежные вопросы