2013-06-14 11 views
24

Poszukuję łatwego/szybkiego sposobu na uzyskanie tablicy identyfikatorów z relacji Aktywny rekord.Aktywny rekord Railsów - Tablica ids z relacji

Obecnie mam:

product_ids = Product.select(:id).where(:colour => 'blue').all.map{|p|p.id} 

Ale to jest brudny i wymaga mapę ..

Coś takiego byłoby chłodniej:

product_ids = Product.where(:colour => 'blue').ids 

Jakieś pomysły?

Dzięki :)

+4

Pluck to najlepsze rozwiązanie tutaj, ale tak jak btw: zamiast 'map {| p | p.id} 'możesz napisać' map (&: id) '. Dotyczy to wszystkich enumeratorów ('each',' any? ',' Select', 'reject' itp.) I wywoła symbol na każdym obiekcie, przez który przechodzi. – jokklan

+0

o tak, wiedziałem o 'map (&: id)' po prostu miał umysł puste, pisząc to: P – complistic

+0

Wystarczająco fair: P! Ale tak czy inaczej dobrze jest wiedzieć dla innych użytkowników czytających to pytanie :) – jokklan

Odpowiedz

52

nieco bardziej schludny rozwiązanie:

Product.where(:colour => 'blue').pluck(:id) 
+0

Dzięki, że działa świetnie! Nie znalazłem go wcześniej, ponieważ jest on pod Obliczenia w dokumentach .. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html – complistic

7

budować na poprzednich odpowiedzi, jeśli pracujesz przez stowarzyszenie, można po prostu dołączyć _ids do zapytania.

Tak w przykładzie, jeśli Supplierhas_manyProducts, a następnie:

supplier.product_ids 

wróci swoją tablicę identyfikatorów produktów, które należy do dostawcy.

Powiązane problemy