通过层次结构获取平均总和

时间:2018-07-02 17:47:51

标签: ruby-on-rails

我正在构建Rails 5应用程序。 在这个应用程序中,我得到了两个对象/模型。记分卡和度量。

一个记分卡可以使用scorecard_id拥有许多记分卡(子代)。 计分卡也可以具有许多度量。每个小节都有一个保存为浮点数的得分属性。

此层次结构可以分为两个级别:

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

我想从度量A和B中获得记分卡A对象的平均分数。

如果我获得了记分卡B,我可以使用以下方法轻松地从Measure A和B获得平均得分,但是我需要通过顶级对象(记分卡A)来获得它。

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

1 个答案:

答案 0 :(得分:0)

您需要遍历每个记分卡并进行度量,并收集总分和计数,以便最终进行计算。一个快速而肮脏的版本看起来像这样:

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