Inject error when no default starting value given?

I have an Event model which has_many :attendees. My Attendee model has a
column called participants, which is an integer representing the number
of participants in the attendees party. I want to sum the total number
of participants for a given event. This works fine if I just the default
option of 0 for the method inject, but inject fails if you don’t give it
a default. In ruby, injects normal behavior will default the sum to 0 if
you don’t provide an argument. See my console output below:

myevent = Event.find(1)
=> #<Event:0x34d95ec @attributes={“title”=>“Canned Food Drive”,
“date”=>“2007-02-01 12:00:00”, “id”=>“1”, “description”=>“We need a
least 20 people to sign up for the canned food drive. This will could
toward service hours and will be a great event to help younger scouts
get involved with the community. We will be collecting, sorting and
delivering donated cans.”, “rsvp_date”=>“2007-01-15”,
“permission_url”=>"/docs/permission.jpg", “location”=>“Saint David’s”}>

myevent.attendees.inject(0){|sum,att| sum = att.participants}
=> 1

myevent.attendees.inject{|sum,att| sum = att.participants}
=> #<Attendee:0x34cc7ac @attributes={“name”=>“Drew O.”,
“event_id”=>“1”, “participants”=>“1”, “contact”=>“847.942.2606”,
“id”=>“1”}>

As you can see, if a default of 0 is not provided, inject returns an
instance of the Attendee class rather than the value in sum. Very
strange…

Misposted, moving to the rails forum.

On Feb 2, 2007, at 2:41 PM, Drew O. wrote:

As you can see, if a default of 0 is not provided, inject returns an
instance of the Attendee class rather than the value in sum. Very
strange…

You gave a Rails example, but it is really a generic Ruby question.

If you don’t give an argument to inject, it will use the first item
in the collection as the starting accumulator:

irb> [1,2,4].inject { |sum,i| p [sum,i]; sum + i }
[1, 2]
[3, 4]
=> 7

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs