2009-07-05 12 views
7

Czy istnieje dobry sposób na odzyskanie wszystkich określonych atrybutów z relacji/kolekcji? Na przykład, chcę listę wszystkich nazw samochodów danej osoby. Oczywiście nie mogę wykonać następujące czynności:Jak mogę odzyskać określone atrybuty relacji/kolekcji?

Person.Cars.Name (ów)

... ale czy coś z tego rodzaju występują w Ruby (czy istnieje metoda pomocnika ActiveRecord), który obsługuje to? Oczywiście mogłem przetestować wszystkie samochody i dołączyć do tablicy, ale chciałbym czegoś nieco czystszego. Jakieś pomysły?

Najlepsza.

Odpowiedz

8

Jeśli cars jest związkiem o person i name właściwością car, można wykonać następujące czynności:

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

lub nawet (dzięki ActiveSupport i/lub Ruby 1.9):

person.cars.collect(&:name) 

Aktualizacja: ten jest udokumentowany w następujących miejscach:

Update 2: przykład, który dotyczy formatowania:

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

Doskonała! Dziękuję Ci. Gdzie dokładnie jest to udokumentowane? Muszę przyznać, że mam sporo czasu z Ruby/Rails, jeśli chodzi o intuicję, gdzie znaleźć określoną funkcjonalność. Nawet przy użyciu dokumentacji online nie jestem w stanie znaleźć niektórych fajniejszych przedmiotów tego rodzaju. –

+0

Składnia &: name jest również wbudowana w Ruby 1.9, więc możesz używać jej poza aplikacjami Railsów, jeśli kierujesz reklamy na nowsze wersje Ruby. – Chuck

+0

Powód, dla którego nie widzisz tego w dokumentach Railsów, polega na tym, że kolekcjoner # collect (lub jego synonim #map) to tylko część zwykłej starej ruby. –

Powiązane problemy