0

私は 4 つのチームを持っており、それぞれに 4 人の個人がいます。各チームのグラフを作成しようとして@allおり、チーム ID でチームとグループから各個人を選択するため、このループは 4 回の反復を生成します。合計しようとしています。これを使用して、各チームの目標、予測、および達成された数値:

<% @all.each do |a| %>

<div style="width:100%; height: 900px; overflow: auto;">
<br>
<h1>
    <%= Date.today.strftime("%B")  %>
    Sales : <%= a.team.name %>
</h1>

<canvas id="<%= a.team.name %>" height="800" width="1000"></canvas>

<% @main = Individual.find(:all, :conditions => "team_id = '#{a.team_id}'")%>


<script>
    var target = <%= @main.sum(:target) %>;
    var forecast = <%= @main.sum(:forecast) %>;
    var achieved = <%= @main.sum(:achieved) %>;
    var barChartData = {
        labels : ["Target", "Forecast", "Achieved"],
        datasets : [{
            fillColor : "rgba(237,28,36,1)",
            strokeColor : "rgba(237,28,36,1)",
            data : [target, forecast, achieved]
        }]

    }
    var opt = {
        scaleFontFamily : "'Trebuchet'",
        scaleFontSize : 20,
        scaleFontColor : "#fff",

    }

    var myLine = new Chart(document.getElementById("<%= a.team.name %>").getContext("2d")).Bar(barChartData, opt);

</script>

</div>
<% end %>

しかし、私はこのエラーが発生しますundefined method '+' for #<Individual:0x007ff08c8164e0>

各個人を個別に実行すると、正しい数値が表示されますが、それらを合計することはできません.

4

1 に答える 1

0

シンボルではなくプロシージャを渡す必要があります。たとえば、次のように置き換えます。

@main.sum(:target)

@main.sum(&:target)

nil 値を 0 と見なすには:

@main.sum { |el| el.target.to_f } # use to_f or to_i depending on your data

補足として、gonを使用して js でデータを渡すことを検討してください。

于 2013-08-14T10:07:10.487 に答える