2009-07-05 17 views
7

¿Hay una buena manera de recuperar todos los atributos específicos de una relación/colección? Por ejemplo, quiero una lista de todos los nombres de los automóviles de una persona. Obviamente no puedo hacer lo siguiente:¿Cómo recupero los atributos específicos de una relación/colección?

Person.Cars.Name (s)

... ¿Pero existe algo de esa naturaleza en Ruby (o hay un método de ayuda ActiveRecord) que se encarga de eso? Obviamente, podría repetir todos los autos y anexar a una matriz, pero me gustaría algo un poco más limpio. ¿Algunas ideas?

Mejor.

Respuesta

8

Si cars es una asociación de un person y name una propiedad de un car, entonces usted puede hacer lo siguiente:

# person = Person.find(conditions) 
person.cars.collect { |car| car.name } 

O incluso (gracias a ActiveSupport y/o Ruby 1.9):

person.cars.collect(&:name) 

actualización: esto se documenta en los siguientes lugares:

Actualización 2: un ejemplo que aplica el formato:

person.cars.collect { |car| "(#{car.name})" } 
+0

Excelente! Gracias. ¿Dónde exactamente está eso documentado? Debo admitir que tengo bastante tiempo con Ruby/Rails cuando se trata de intuir dónde encontrar cierta funcionalidad. Incluso utilizando documentación en línea, no puedo encontrar algunos de los artículos más geniales de esta naturaleza. –

+0

La sintaxis &: name también está incorporada en Ruby 1.9, por lo que puede usarla fuera de las aplicaciones de Rails si se dirige a versiones de Ruby más nuevas. – Chuck

+0

La razón por la que no ve esto en los documentos de Rails es que Enumerable # collect (o su sinónimo #map) son solo parte de Ruby. –

Cuestiones relacionadas