El 13 de abril de 2010 19:12, Maximiliano Guzman <
[email protected]> escribió:
>
>>> perdón, eso no va a andar, me olvidé del map
>>
>> @clientes_movimientos_debitos.select { |cli_debito|
>>
>> cli_debito.solicitud.id == cliente_mov.solicitud.id
>> }.map(&:cant_cuotas).sum
>>
>>
>>
> para aclarar un poco porqué se necesita ese map ahí... select te devuelve
> un array. Y lo que necesitas es #cant_cuotas de cada elemento del array.
> #map o #collect lo que hace es recorrer un array u otra colección y devolver
> otro array. La versión larga de ese map sería:
>
> .map {|cli_debito| cli_debito.cant_cuotas }.sum
>
> o sea, te devuelve otro array que es el resultado de aplicar alguna
> operación a cada elemento del array (u otra colección) original.
>
> lo de .map(&:cant_cuotas), es una version abreviada que podés usar cuando
> lo único que le vas a hacer a cada elemento es llamar un método. Entonces le
> mandás .map(&:<nombre_del_metodo>).
>
>
Muy buena la explicación. Para agregar un granito de arena más, en este caso
no haría falta el map, podés pasarle qué método querés usar para la suma
directamente a sum:
@clientes_movimientos_debitos.select { |cli_debito|
cli_debito.solicitud.id == cliente_mov.solicitud.id
}.sum(&:cant_cuotas)
O usar inject en lugar de select + sum (o map + sum). Acuérdense que sum
está definido en ActiveSupport, en cambio a inject lo tenés siempre a mano.
Saludos,
Matías
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar