I was doing this: @line_items = LineItems.find_all_by_invoice_id(params[:id]) @payments = Payments.find_all_by_invoice_id(params[:id]) @total = @line_items.sum{ |item| item.cost } @payment_total = @payments.sum{ |payment| payment.value } @balance = @total - @payment_total But when no payments had been made it was coming up with an error when trying to sum nil, so I did this: begin @payment_total = @payments.sum{ |payment| payment.value } rescue @payment_total = 0 end So, when the sum failed it returned @payment_total as zero. Now, SURELY, there''s a better way to do this? I''m sure it''s obvious when you know how. Please, enlighten me. -- 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 -~----------~----~----~----~------~----~------~--~---
All you need to do to your original code is add a condition to make sure @payments is not null: @payment_total = @payments.sum{ |payment| payment.value } unless @payments.nil? Or can payment.value be nil for some payments but not others? Inject could help in that case: @payment_totals = @payments.inject(0) { |sum, p| sum + p.value unless p.value.nil? } Before running either one of these, you can initialize both @total and @payment_total to zero: @total, @payment_total = 0, 0 Hope that helps. PS: Wonder if you need all of these to be @instance_variables ? On Apr 1, 10:16 am, Tom Harvey <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> I was doing this: > > @line_items = LineItems.find_all_by_invoice_id(params[:id]) > @payments = Payments.find_all_by_invoice_id(params[:id]) > > @total = @line_items.sum{ |item| item.cost } > @payment_total = @payments.sum{ |payment| payment.value } > > @balance = @total - @payment_total > > But when no payments had been made it was coming up with an error when > trying to sum nil, so I did this: > > begin > @payment_total = @payments.sum{ |payment| payment.value } > rescue > @payment_total = 0 > end > > So, when the sum failed it returned @payment_total as zero. Now, SURELY, > there''s a better way to do this? I''m sure it''s obvious when you know > how. Please, enlighten me. > -- > Posted viahttp://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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Wed, Apr 1, 2009 at 9:16 AM, Tom Harvey <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > I was doing this: > > @line_items = LineItems.find_all_by_invoice_id(params[:id]) > @payments = Payments.find_all_by_invoice_id(params[:id]) > > @total = @line_items.sum{ |item| item.cost } > @payment_total = @payments.sum{ |payment| payment.value }You can do @payment_total = @payments.sum{ |payment| payment.value } if @payments or @payment_total = @payments.sum{ |payment| payment.value } rescue 0 or @payment_total = @payments ? @payments.sum{ |payment| payment.value } : 0> @balance = @total - @payment_total > > > But when no payments had been made it was coming up with an error when > trying to sum nil, so I did this: > > begin > @payment_total = @payments.sum{ |payment| payment.value } > rescue > @payment_total = 0 > end > > So, when the sum failed it returned @payment_total as zero. Now, SURELY, > there''s a better way to do this? I''m sure it''s obvious when you know > how. Please, enlighten me.-- Greg Donald http://destiney.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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks Guys, that''s much more Ruby like code! -- 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 -~----------~----~----~----~------~----~------~--~---