2009-07-05 11 views
7

Gibt es eine gute Möglichkeit, alle spezifischen Attribute aus einer Beziehung/Sammlung abzurufen? Zum Beispiel möchte ich eine Liste aller Namen der Autos einer Person. Natürlich kann ich nicht wie folgt vorgehen:Wie kann ich bestimmte Attribute einer Beziehung/Sammlung abrufen?

Person.Cars.Name (n)

..., aber etwas in der Natur existieren in Ruby (oder gibt es eine Active Helfer-Methode), die die Griffe? Natürlich könnte ich über alle Autos iterieren und an ein Array anhängen, aber ich hätte gerne etwas sauberer. Irgendwelche Ideen?

Am besten.

Antwort

8

Wenn cars eine Assoziation eines person ist, und name eine Eigenschaft eines car, dann können Sie wie folgt vorgehen:

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

Oder auch (dank ActiveSupport und/oder Ruby 1.9):

person.cars.collect(&:name) 

Update: dies in folgenden Orten dokumentiert ist:

Update 2 verwendet: ein Beispiel, das die Formatierung gilt:

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

Excellent! Vielen Dank. Wo genau ist das dokumentiert? Ich muss zugeben, ich habe eine Menge Zeit mit Ruby/Rails, wenn es darum geht, zu erkennen, wo man bestimmte Funktionen findet. Selbst mit Online-Dokumentation kann ich einige der cooleren Artikel dieser Art nicht wirklich finden. –

+0

Die Syntax von &: name ist auch in Ruby 1.9 integriert, sodass Sie sie außerhalb von Rails-Apps verwenden können, wenn Sie auf neuere Ruby-Versionen abzielen. – Chuck

+0

Der Grund, warum Sie dies in den Rails-Dokumenten nicht sehen, ist, dass Enumerable # collect (oder sein Synonym #map) nur ein Teil des einfachen alten Ruby ist. –

Verwandte Themen