2009-07-05 5 views
7

Existe-t-il un bon moyen de récupérer tous les attributs spécifiques d'une relation/collection? Par exemple, je veux une liste de tous les noms des voitures d'une personne. Il est évident que je ne peux pas faire ce qui suit:Comment récupérer des attributs spécifiques d'une relation/collection?

Person.Cars.Name (s)

... mais fait quelque chose de cette nature existent en rubis (ou est-il une méthode d'aide ActiveRecord) qui gère cela? Évidemment, je pourrais parcourir toutes les voitures et ajouter à un tableau, mais j'aimerais quelque chose d'un peu plus propre. Des idées?

Meilleur.

Répondre

8

Si cars est une association d'un person et name une propriété d'un car, alors vous pouvez faire ce qui suit:

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

Ou même (grâce à ActiveSupport et/ou Ruby 1.9):

person.cars.collect(&:name) 

Mise à jour: cela est documenté dans les endroits suivants:

Mise à jour 2: un exemple qui applique la mise en forme:

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

Excellent! Je vous remercie. Où est-ce exactement documenté? Je dois avouer que j'ai beaucoup de temps avec Ruby/Rails quand il s'agit de savoir où trouver certaines fonctionnalités. Même en utilisant la documentation en ligne, je ne suis pas vraiment en mesure de trouver certains des articles les plus cool de cette nature. –

+0

La syntaxe &: name est également intégrée dans Ruby 1.9. Vous pouvez donc l'utiliser en dehors des applications Rails si vous ciblez des versions plus récentes de Ruby. – Chuck

+0

La raison pour laquelle vous ne le voyez pas dans les docs Rails est que Enumerable # collect (ou son synonyme #map) ne sont qu'une partie du vieux Ruby. –

Questions connexes