Como faço para recuperar atributos específicos de uma relação / coleção?
-
23-08-2019 - |
Pergunta
Existe uma boa maneira de recuperar todos um atributo específico de uma relação / coleção? Por exemplo, eu quero uma lista de todos os nomes de carros de uma pessoa. Obviamente eu não posso fazer o seguinte:
Person.Cars.Name (s)
... mas faz algo de que existem natureza em Ruby (ou há um método auxiliar ActiveRecord) que lida com isso? Obviamente eu poderia iteração sobre todos os carros e acréscimo para um array, mas eu gostaria de algo um pouco mais limpo. Alguma idéia?
Best.
Solução
Se cars
é uma associação de um person
e name
uma propriedade de um car
, então você pode fazer o seguinte:
# person = Person.find(conditions)
person.cars.collect { |car| car.name }
Ou mesmo (graças a ActiveSupport
e / ou Ruby 1.9):
person.cars.collect(&:name)
Atualização: isso está documentado nos seguintes locais:
- procuração Associação para
has_many
retornosArray
-
Array#collect
-
Symbol#to_proc
emActiveSupport
, utilizada no segundo exemplo -
Symbol#to_proc
no Ruby 1.9
Update 2: um exemplo que aplica a formatação:
person.cars.collect { |car| "(#{car.name})" }