Any idees why I can do this: @sum = @selected.inject(0) { |sum, player| sum + player.value } but not this: @sum = @selected.sum { |player| player.value } @sum = @selected.sum(&:value) The last two give me following error: wrong number of arguments (1 for 2) /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations/association_collection.rb:164:in `calculate'' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations/association_collection.rb:164:in `send'' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations/association_collection.rb:164:in `method_missing'' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1693:in `with_scope'' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations/association_collection.rb:164:in `send'' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations/association_collection.rb:164:in `method_missing'' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations/association_collection.rb:47:in `sum'' app/controllers/player_controller.rb:31:in `select'' -- Posted via http://www.ruby-forum.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 12 May 2008, at 23:42, Fredrik [:all] wrote:> > Any idees why I can do this: > @sum = @selected.inject(0) { |sum, player| sum + player.value } > > but not this: > @sum = @selected.sum { |player| player.value } > @sum = @selected.sum(&:value) > > The last two give me following error: >Because rails redefines sum so that you can do some_association.sum :some_column_name Fred> wrong number of arguments (1 for 2) > > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > associations/association_collection.rb:164:in > `calculate'' > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > associations/association_collection.rb:164:in > `send'' > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > associations/association_collection.rb:164:in > `method_missing'' > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > base.rb:1693:in > `with_scope'' > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > associations/association_collection.rb:164:in > `send'' > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > associations/association_collection.rb:164:in > `method_missing'' > /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ > associations/association_collection.rb:47:in > `sum'' > app/controllers/player_controller.rb:31:in `select'' > -- > Posted via http://www.ruby-forum.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung wrote:> Because rails redefines sum so that you can do > some_association.sum :some_column_nameMore specifically, the #sum method on an ActiveRecord collection proxy queries the database with the argument provided. If you want to use more complex summations you can using what you''re used to with inject by saying: @sum = @selected.to_a.sum { |player| player.value } Or a more complex summation: @sum = @selected.to_a.sum { |player| player.value + player.handicap } Cheers, Daniel -- Posted via http://www.ruby-forum.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Say you have a players table with a score field in it and you want to find the combined score of all players. Player.find(:all, :select => "score").map(&:score).sum --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---