Hi Jim.. thanks.. looks good now.. I had a mistake in another model..so the grouping was not correct.
my god.. what a trip sometimes.. Werner Am Freitag, 25. Januar 2013 14:50:53 UTC+1 schrieb jim: > > > > > On Fri, Jan 25, 2013 at 9:42 PM, Werner > <webagent...@googlemail.com<javascript:> > > 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 >> rubyonra...@googlegroups.com<javascript:> >> . >> To unsubscribe from this group, send email to >> rubyonrails-ta...@googlegroups.com <javascript:>. >> 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. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/td429VDXMEUJ. For more options, visit https://groups.google.com/groups/opt_out.