0

これはStackoverflowに関する私の最初の質問なので、私をバラバラにしないでください!質問が長すぎたり、基本的すぎたりする場合はお詫びしますが、わかりやすく、明確に、そして十分に入力すると、関係者全員が私の問題を理解しやすくなると思います。質問のフォーマットを改善できる場合は、後の質問のために知らせてください。

状況を説明するために、Googlegraphsにレコードの配列(Times)を表示するRubyonRailsアプリを作成しています。これらのTimesレコードには2つの重要な属性があります。それらの「date」属性と「hours_worked」属性。簡単に言えば、グラフの特定の日付のすべての「hours_worked」を表示する必要があります。したがって、グラフに表示される配列の最初の要素は、最初の日付のすべての「 hours_worked 」値を保持し、2番目の要素は、2番目の日付のすべての「hours_worked」値を保持します。

明らかに、すべてのレコードの「hours_worked」値を配列に入れることはできません。これは、 「date」属性が完全に無視されるためです。2つの要素が同じ「日付」にある「hours_worked」の配列がある場合、グラフはこれを認識せず、「日付」をまったく認識せずにすべてを表示します。

擬似コードを使用した私の「ソリューション」:

ただし、すべての「Time」レコードを反復処理して、 「dates」が1つの配列にすでに存在するレコードに分割し、すべてのコピーを別の配列に配置することはできます。

@array1 = []#Original values
@array2 = []

@task.time_and_attendances.each do |f|
 if f.date is not in @array2
 @array2 << f

else

  @array1 << f

次に、2つの配列を比較し、@ array2に@array1に含まれる日付が含まれている場合は、単に「hours_worked」を足し合わせます。@ array1には、この追加が必要なすべてのレコードが含まれるため、複数のレコードがある日付には、「hours_worked」属性が組み合わされます。これにより、各値がすべての単一の日付の「hours_worked」の合計量である配列が得られます。

それは私の問題に対する理想的な解決策ですが、それを実装する方法について私は困惑しています。誰かアイデアはありますか?

4

1 に答える 1

0

おそらく次のようなものです:

Time.select('date, sum(hours_worked) as total_hours_worked').group('date(date)')

これにより、date属性とtotal_hours_worked属性を持つTimeオブジェクトの配列が得られます。

于 2013-03-25T18:21:29.680 に答える