2009-07-05 22 views
7

C'è un buon modo per recuperare tutto un attributo specifico da una relazione/collezione? Ad esempio, voglio un elenco di tutti i nomi delle auto di una persona. Ovviamente non posso effettuare le seguenti operazioni:Come posso recuperare attributi specifici di una relazione/collezione?

Person.Cars.Name (s)

... ma fa qualcosa del genere esiste in Ruby (o c'è un metodo ausiliario ActiveRecord) che gestisce questo? Ovviamente potrei scorrere tutte le macchine e aggiungere un array, ma mi piacerebbe qualcosa di un po 'più pulito. Qualche idea?

Migliore.

risposta

8

Se cars è un'associazione di un person, e name una proprietà di un car, quindi è possibile effettuare le seguenti operazioni:

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

O anche (grazie a ActiveSupport e/o Ruby 1.9):

person.cars.collect(&:name) 

Update: questo è documentato nei seguenti luoghi:

Aggiornamento 2: un esempio che si applica la formattazione:

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

Eccellente! Grazie. Dove è documentato esattamente? Devo ammettere, ho un bel po 'di tempo con Ruby/Rails quando si tratta di intuire dove trovare determinate funzionalità. Anche usando la documentazione online non sono davvero in grado di trovare alcuni degli elementi più interessanti di questa natura. –

+0

Anche la sintassi &: name è incorporata in Ruby 1.9, quindi puoi usarla al di fuori delle app Rails se stai mirando alle nuove versioni di Ruby. – Chuck

+0

Il motivo per cui non vedi questo nei documenti Rails è che Enumerable # collect (o il suo sinonimo #map) sono solo parte del semplice vecchio Ruby. –

Problemi correlati