计算Rails中For Loop的结果

时间:2019-03-14 09:29:07

标签: ruby-on-rails loops ruby-on-rails-5

我正在一个Objectives表上运行一个For Loop,以列出所有关键结果分数。关键结果得分是根据“关键结果”表中几列的计算得出的。

问题:我想将所有关键结果得分的平均得分添加到循环目标中。

目标1

  • 主要结果得分1
  • 主要结果得分2
  • 主要结果得分3

平均值: xxx

目标2

  • 主要结果得分1
  • 主要结果得分2
  • 主要结果得分3

平均值: xxx

问题:下面的代码段可以获取所有分数,但是我不知道如何平均这些分数?

<% @objectives.each do |objective| %>
  <% objective.keyresults.each do |keyresult| %>
    <%= number_to_percentage((keyresult.scores.maximum("score") - keyresult.start_score) / (keyresult.target - keyresult.start_score) * 100, precision: 0)  %>
   <% end %>
 <% end %>

1 个答案:

答案 0 :(得分:2)

我想这取决于您想要的平均水平,但是像这样的方法会起作用:

<% @objectives.each do |objective| %>
  <% total_score = 0 %>
  <% objective.keyresults.each do |keyresult| %>
    <% score = (keyresult.scores.maximum("score") - keyresult.start_score) / (keyresult.target - keyresult.start_score) %>
    <% total_score += score %>
    <%= number_to_percentage(score * 100, precision: 0)  %>
  <% end %>
  <%= "Average: #{number_to_percentage(total_score / objective.keyresults.size * 100, precision: 0)}" %>
<% end %>

但是……您 REALLY 不应像看起来那样在视图中进行这些计算。这是业务逻辑,可以属于某个地方的模型,也可以属于服务对象。