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.