2011-10-03 18 views

Respuesta

17

¿Qué hay de tratar hotels.map(&:id) o hotels.map{|h| h.id }?

Ambos significan lo mismo para Ruby, el primero es más agradable para los rubíes acostumbrados, mientras que el segundo es más fácil de entender para los principiantes.

+1

Debe ser 'hotels.map (Y: id)'. De lo contrario, estoy de acuerdo con la respuesta – DanneManne

+0

'hotels.map (&: id)' sería más agradable. editar: superado por @DanneManne :-) –

+0

@DanneManne Buena captura para el error tipográfico: me muerde cada vez:/ – Romain

7

También puede extraer solo la identificación.

hotels.select(:id).where(selection: 1) 
+1

Solución más objetiva, fácil y rápida. Parece tan obvio, pero la gente insiste en usar métodos enumerables para ** todo **. –

11

Si sólo necesita una matriz con todos los identificadores se debe utilizar pluck, ya que hace la consulta a la derecha y no tener que utilizar ningún rubí. Además, no tendrá que crear una instancia de un objeto Hotel para cada registro devuelto por el DB. (mucho más rápido).

Hotel.where(selection: 1).pluck(:id) 
# SELECT hotels.id FROM hotels WHERE hotels.selection = 1 
# => [2, 3] 
Cuestiones relacionadas