Rails 3 создает и усредняет несколько массивов
У меня есть две модели клиентов и отчетов. Клиент имеет_ множество отчетов, а отчет принадлежит_ клиенту. У Клиента есть: атрибут специальности (врач, стоматолог, юрист), а в Отчете - атрибут: сумма. Для каждого Клиента в календарном квартале создается 4 Отчета в год.
Что я хочу сделать, так это уметь усреднять: суммы по записям для данной специальности: говорят юристы. Я могу получить один большой массив с этими значениями из этого конкретного: специальности, как это:
Quarter.includes(:client).where('clients.specialty=?','Lawyer').map(&:amounts)%>
Мне интересно, есть ли способ напечатать массив для каждого клиента с этим: speciality, а затем усреднить их в другом массиве. Должен ли я использовать цикл здесь, как это:
<% Quarter.includes(:client).where('clients.specialty=?', 'Lawyer').each do |c| %>
<%= c.amount %>
<% end %>
Если да, то как мне выделить его так, чтобы вместо одного огромного массива они были отдельными в зависимости от клиента, которому он принадлежит?
1 ответ
Вы можете использовать group
метод.
Для каждой специальности:
Quarter.includes(:client).group('clients.specialty').average('quarters.amounts')
Это вернет OrderedHash
какой ключ является specialty
столбец, указанный в group
и значение представляет собой соответствующие средние суммы
Для каждого клиента:
Quarter.includes(:client).group('clients.id').average('quarters.amounts')