0

model次の属性を持つ があります。

user_id,  week_id,  project_id,  hours
1         61         1             20
1         62         1              5
1         61         2             15
1         63         1              0
2         61         1              0

私のview見た目は次のようになります:

<tr>
61 | 62 | 63  (week_id)
35 | 5  | 0   (Sum of hours per week_id)
</tr>

all_hours = Model.group_by(&:user_id)
@all_hours.each do |user, hours| %>
<tr>
hours.each do | hour |
hour.my_hours

そして私に2行を与えますuser 1

2 回目をグループ化し、week_id あたりの時間を合計して、必要な結果を得るにはどうすればよいですか?

より明確にするために(うまくいけば):

@hours= Model.all.group_by(&:user_id)
<% @hours.each do |user, hours| %>

<tr>
  <% hours.each do |h|%>
      <td><%= h.hours%></td>
  <% end %>
</tr>

0.0 20.0 0.0 .... 0.0 15.0 0.0 のように、ユーザーごとに 1 つの長い行が表示されます。この行で 20 と 15 を合計したい 0.0 35.0 0.0

4

1 に答える 1

0

Rails 3でこれを試してみます:

Model.select(:week_id).
  select(Model.arel_table[:hours].sum.as("sum_of_hours")).select(:user_id)
  group(:week_id).group(:user_id)

ここで使用されているライブラリはarel、Rails 3 の activerecord の一部です。

これは機能すると思います。しかし、私はそれを自分で試していません。お役に立てれば。

于 2013-02-12T14:23:46.910 に答える