Получение средней суммы по иерархии - PullRequest
0 голосов
/ 02 июля 2018

Я строю рельсы 5 приложение. В этом приложении я получил два объекта / модели. Система показателей и измерения.

В системе показателей может быть много Систем показателей (детей), использующих Scorecard_id. Система показателей также может иметь много показателей. Каждый показатель имеет атрибут оценки, сохраненный в виде числа с плавающей запятой.

Эта иерархия может быть выполнена на двух уровнях:

Scorecard A
-> Scorecard B
   -> Measure A (score 7.5)
   -> Measure B (score 8.0)

Я хочу получить среднюю оценку по показателям A и B для объекта Scorecard A.

Если я получу оценочную карточку B, я легко получу среднюю оценку по мерам A и B, используя метод, описанный ниже, но мне нужно будет получить его через объект верхнего уровня (оценочная карточка A).

def score
   self.measures.sum(:score) / self.measures.count
end

1 Ответ

0 голосов
/ 02 июля 2018

Вам нужно перебрать каждую карту показателей и показатель и собрать как общий счет, так и счет, чтобы выполнить вычисление в самом конце. Быстрая и грязная версия этого будет выглядеть так:

def score
    count = 0
    total_score = 0
    scorecards.each do |s|
        (c, t) = s.measure_calc
        count = count + c
        total_score = total_score + t
    end
    (c, t) = measure_calc
    count = count + c
    total_score = total_score + t

    return total_score / count
end

def measure_calc
    count = 0
    total_score = 0
    measures.each do |m|
        count = count + 1
        total_score = total_score + m.score
    end
    return count, total_score
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...