2010-12-22 10 views
6

Tengo el siguiente:Rieles map_with_index?

:participants => item.item_participations.map { |item| 
     {:item_image => item.user.profile_pic.url(:small)} 
    } 

que desea que esto ocurra no más de 3 veces en el interior. Intenté map_with_index pero eso no funcionó.

¿Alguna sugerencia sobre cómo puedo romper después de un máximo de 3 carreras en el ciclo?

Respuesta

9
my_array.take(3).map { |element| calculate_something_from(element) } 
+0

¿Dónde se define el método 'take'? –

+1

El método take se define en Enumerable -> http://ruby-doc.org/core-1.9/classes/Enumerable.html#M003070 –

1

Necesita slice la matriz, realice map en ese conjunto, luego concatenar el resto de la matriz hasta el final de la matriz devuelta desde map.

:participants => (item.item_participations[0..2].map { |item| 
    {:item_image => item.user.profile_pic.url(:small)} 
} + item.item_participations[3..-1]) 

He aquí un ejemplo:

alt text

21

A partir de Ruby 1.9, puede utilizar map.with_index:

:participants => item.item_participations.map.with_index { |item, idx| 
    {:item_image => item.user.profile_pic.url(:small)} 
    break if i == 2 
} 

Aunque yo prefiero tipo de método propuesto por la Justicia.

+0

Esto no funciona para mí .. Lanza un error: 'método indefinido 'with_index 'for # ' –

+2

Encontré una solución para mi problema:' t (' date.day_names '). each_with_index.map {| day, idx | [day, idx]} ' –

+1

Parece que map.with_index no está disponible hasta Ruby 1.9. –