Wie kann ich bestimmte Attribute einer Beziehung / Sammlung abrufen?
-
23-08-2019 - |
Frage
Gibt es eine gute Möglichkeit, alle ein bestimmtes Attribut aus einer Beziehung / Sammlung abzurufen? Zum Beispiel möchte ich eine Liste aller Namen eines Autos Person. Natürlich kann ich nicht tun, wie folgt vor:
Person.Cars.Name (n)
..., aber etwas in der Natur existieren in Ruby (oder gibt es eine Active Helfer-Methode), die die Griffe? Offensichtlich konnte ich über alle Autos durchlaufen und auf ein Array anhängen, aber ich möchte etwas ein bisschen sauberer. Irgendwelche Ideen?
Best.
Lösung
Wenn cars
eine Vereinigung eines person
ist, und name
eine Eigenschaft eines car
, dann können Sie wie folgt vor:
# person = Person.find(conditions)
person.cars.collect { |car| car.name }
oder auch (dank ActiveSupport
und / oder Ruby 1.9):
person.cars.collect(&:name)
Update: diese in folgenden Orten dokumentiert ist:
- Vereinigung Proxy für
has_many
kehrtArray
-
Array#collect
-
Symbol#to_proc
inActiveSupport
, im zweiten Beispiel verwendet -
Symbol#to_proc
in Ruby 1.9
Update 2: ein Beispiel, das die Formatierung gilt:
person.cars.collect { |car| "(#{car.name})" }