On Fri, Jan 25, 2013 at 9:42 PM, Werner <webagentur.la...@googlemail.com>wrote:

> Well.. I cant get it working
>
> Try to explain it again..
>
> db_table:
> week_id, project_id, user_id, hour
> ex. =>
> 33, 1, 1, 10
> 33, 4, 1, 20
> 33, 1, 2, 0
> 34, 1, 2, 15
> 34, 1, 1, 0
>
>
> So, user with the id 1 worked 10 hours in week 33 and 20 in the week 33,
> but other project
> I want to show all hours summed up per week per user
> row1(user1) => week 33 => 30, week 34 => 0
> row2(user2) => week 33 => 0, week 34 => 15
>
> Step one:
> I want one row per user, so I group:
> @hours = HourUser.all.group_by(&:user_id)
>
> view:
> @hours.each do |user, weeks|
>
> gives me each user in one <tr>
> within this row, each week one cell
>
> <% weeks.group_by(&:week_id).each do |week, hours| %>
> <td><%= hours.map(&:hour).sum %>
>
> Shows the hours but not summed up. Instead I get :
> row 1 =>  ...10.. and does not stop the row but starts again with ... 20...
> row 2 =>  ...0 15
>

so this is your remaining problem right?  I think the hour column is
a string which results to a concat of the values instead of simple
addition.  try hours.map { |h| h.hour.to_f }.sum


>
> How to? Do I also have to group otherwise..?
> Thanks for support.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> Am Donnerstag, 24. Januar 2013 16:01:06 UTC+1 schrieb jim:
>>
>>
>>
>>
>> On Thu, Jan 24, 2013 at 10:38 PM, Werner <webagent...@googlemail.**com>wrote:
>>
>>> Jim..sorry.. not my day...
>>> have to contemplate about your solution.
>>>
>>> I wonder..
>>>
>>> HourUser.includes(:user).**where.....group_by { |h| h.week_id }
>>>
>>> <% @hours.keys.sort.each do |h| %>
>>>  <%= @hours[h].collect(&:hour).sum %></td>
>>> <% end %>
>>>
>>> is giving me what I want, just needs to be grouped by user_id
>>>
>>> Thanks so far.
>>>
>>
>> So given the current solution you have, you also want to group by user_id
>> right?
>> so here's how it should go.
>>
>> @hour_users = HourUser.all.group_by(&:week_**id)
>>
>> gives you a hash with week_ids as keys
>>
>> @hour_users.each do |week_id, by_week|
>>   by_week.group_by(&:user_id).**each do |user_id, hour_users|
>>     hour_users.map(&:hour).sum
>>   end
>> end
>>
>> using my first suggestion
>>
>> @hour_users = HourUser.sum(:hour, group: [:week_id, :user_id])
>>
>> @hour_users.each do |(week_id, user_id), total_hours|
>>   # do something with week_id, user_id and total_hours
>> end
>>
>> Good luck!
>>
>>>
>>>
>>>
>>> Am Donnerstag, 24. Januar 2013 14:16:16 UTC+1 schrieb jim:
>>>>
>>>>
>>>>
>>>>
>>>> On Thu, Jan 24, 2013 at 7:55 PM, Werner 
>>>> <webagent...@googlemail.**com>wrote:
>>>>
>>>>> Hi Jim.. thanks so far..
>>>>>
>>>>> in the moment this is a bit too far for me.
>>>>>
>>>>>
>>>>> Just remember that to get a certain value, you'll have to pass an
>>>>> array as the index
>>>>> ie sums[[33,2]] to get 70
>>>>> => this is unclear
>>>>> Pls. be so kind to explain the view part.
>>>>>
>>>>
>>>> since the keys of the hash is an array, you need to use an array as the
>>>> index to get a value
>>>>
>>>> >> sums = { [33, 2] => 70, [34, 2] => 15, [35, 3] => 20 }
>>>> >> sums[34,2]
>>>> ArgumentError: wrong number of arguments (2 for 1)
>>>> from (irb):3:in `[]'
>>>> from (irb):3
>>>> >> sums[[34,2]] # 15
>>>>
>>>> the keys are defined by the group option you passed to #sum, so if you
>>>> pass as sql statement to
>>>> the group option, you'll get that as key. ie (postgre)
>>>>
>>>> >> HourUser.sum(:hours, group: "week_id || ' --- ' || user_id", order:
>>>> :user_id)
>>>> >> { '33 --- 2' => 70, '34 --- 2' => 15, '35 --- 3' => 20 }
>>>>
>>>> hope this helps
>>>>
>>>>
>>>>
>>>>>
>>>>> Werner
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Am Donnerstag, 24. Januar 2013 11:36:44 UTC+1 schrieb jim:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Jan 24, 2013 at 4:35 PM, Werner <webagent...@googlemail.**com
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi.. I need some support...
>>>>>>>
>>>>>>> table:
>>>>>>> week_id, user_id, project_id, hours
>>>>>>> ex. =>
>>>>>>> 33, 2, 1, 10
>>>>>>> 34, 2,1,15
>>>>>>> 33, 2, 2, 20
>>>>>>> 35, 3, 1,20
>>>>>>> etc.
>>>>>>
>>>>>>
>>>>>>> Want to display a sum of hours per week_id per user_id
>>>>>>> I have:
>>>>>>>
>>>>>>> @hours = HourUser.includes(:user).**group****_by { |h| h.week_id }
>>>>>>>
>>>>>>> @hours.keys.sort.each do |hour|
>>>>>>> @hours[hour].collect(&:**stunden****).sum
>>>>>>>
>>>>>>
>>>>>> Look at http://api.rubyonrails.org/******classes/ActiveRecord/**
>>>>>> Calculati****ons.html#method-i-sum<http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum>
>>>>>>
>>>>>> sums = HourUser.sum(:hours, group: [:week_id, :user_id], order:
>>>>>> :user_id)
>>>>>>
>>>>>> You'll end up with something like [33, 2] => 70, [34, 2] => 15, [35,
>>>>>> 3] => 20
>>>>>> Just remember that to get a certain value, you'll have to pass an
>>>>>> array as the index
>>>>>> ie sums[[33,2]] to get 70
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Hours are summed up, but not sorted by user_id..
>>>>>>> How to get that?
>>>>>>>
>>>>>>> Thanks
>>>>>>> Werner
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Ruby on Rails: Talk" group.
>>>>>>> To post to this group, send email to rubyonra...@googlegroups.**com.
>>>>>>> To unsubscribe from this group, send email to rubyonrails-ta...@**
>>>>>>> googlegroups****.com.
>>>>>>>
>>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/**ms****g/rubyonrails-talk/-/**nIwEcQd5R
>>>>>>> ****UMJ<https://groups.google.com/d/msg/rubyonrails-talk/-/nIwEcQd5RUMJ>
>>>>>>> .
>>>>>>> For more options, visit https://groups.google.com/**grou****
>>>>>>> ps/opt_out <https://groups.google.com/groups/opt_out>.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> ------------------------------******------------------------------***
>>>>>> ***-
>>>>>> visit my blog at http://jimlabs.heroku.com
>>>>>>
>>>>>  --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Ruby on Rails: Talk" group.
>>>>> To post to this group, send email to rubyonra...@googlegroups.**com.
>>>>> To unsubscribe from this group, send email to rubyonrails-ta...@**
>>>>> googlegroups**.com.
>>>>> To view this discussion on the web visit https://groups.google.com/d/*
>>>>> *ms**g/rubyonrails-talk/-/**CDisLJSEM**NEJ<https://groups.google.com/d/msg/rubyonrails-talk/-/CDisLJSEMNEJ>
>>>>> .
>>>>>
>>>>> For more options, visit 
>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>> .
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> ------------------------------****------------------------------****-
>>>> visit my blog at http://jimlabs.heroku.com
>>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ruby on Rails: Talk" group.
>>> To post to this group, send email to rubyonra...@googlegroups.**com.
>>> To unsubscribe from this group, send email to rubyonrails-ta...@**
>>> googlegroups.com.
>>> To view this discussion on the web visit https://groups.google.com/d/**
>>> msg/rubyonrails-talk/-/rs-cau_**8-hcJ<https://groups.google.com/d/msg/rubyonrails-talk/-/rs-cau_8-hcJ>
>>> .
>>>
>>> For more options, visit 
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>
>>
>>
>> --
>> ------------------------------**------------------------------**-
>> visit my blog at http://jimlabs.heroku.com
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-/uOA60u2KRusJ.
>
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



-- 
-------------------------------------------------------------
visit my blog at http://jimlabs.heroku.com

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to