Why does this work?

Your suspicion is correct. "<<" is a "destructive" operator, so your:

  @users.push([employee.id => employee.lname << ", " << employee.fname])

is actually pushing "," and employee.fname INTO employee.lname, destroying its original value.