私のモデルのいくつかに次のコード行があります。
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