我的几个模型中有以下代码行:
def average(scores)
# get average of scores and round to two decimal places
average = scores.inject{ |sum, el| sum + el }.to_f / scores.size
average.round(2)
end
我试图将它放入各种帮助文件中,并取得了不同程度的成功 - 但问题不在于我无法工作,而在于它需要一些丑陋的代码和/或额外的文件(模块等)才能包含在所有模型中都采用这种方法——这引发了一些危险信号。它不应该那么难。
辅助代码对于控制器和视图来说很容易,但对于模型来说似乎真的违反直觉——同时,在 4 个地方(字面上)拥有完全相同的代码似乎很愚蠢。把它弄干的最好方法是什么?
更新
我想average
在每个模型的方法中使用帮助器 - 在每种情况下都是不同的,但对于所有内容的最后一行 - 就像这样:
def avg_for(student)
scores = []
self.evals.map do |student_id, evals|
evals.select {student_id == student.id}.each do |eval|
scores << eval.score
end
end
average(scores) #here!
end