¿Cómo puedo recuperar los atributos específicos de una relación / colección?
-
23-08-2019 - |
Pregunta
¿Hay una buena manera de recuperar todos un atributo específico de una relación / colección? Por ejemplo, quiero una lista de todos los nombres de los coches de una persona. Obviamente no puedo hacer lo siguiente:
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 iterar sobre todos los coches y añadir a una matriz, pero me gustaría algo un poco más limpia. ¿Alguna idea?
Mejor.
Solución
Si cars
es una asociación de un person
y name
una propiedad de un car
, a continuación, 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:
- proxy de la Asociación para las devoluciones
has_many
Array
-
Array#collect
-
Symbol#to_proc
enActiveSupport
, utilizado en el segundo ejemplo -
Symbol#to_proc
en Ruby 1,9
Actualización 2: un ejemplo que aplica el formato:
person.cars.collect { |car| "(#{car.name})" }