2013-06-14 15 views
24

Ich bin auf der Suche nach einer einfachen/schnellen Möglichkeit, ein Array von IDs aus einer Active Record-Beziehung zu bekommen.Rails Active Record - Get IDs Array von Relation

Zur Zeit habe ich:

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

Aber das ist chaotisch und erfordert eine Karte ..

So etwas wäre cooler:

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

Irgendwelche Ideen?

Thanks :)

+4

Pluck ist hier die beste Lösung, aber nur als Btw: statt 'map {| p | p.id} 'Können Sie' map (&: id) 'schreiben? Dies gilt für alle Enumeratoren ('each',' any? ',' Select', 'reject' usw.) und ruft das Symbol für jedes Objekt auf, das durchläuft. – jokklan

+0

oh yeah, ich wusste über 'map (&: id)' hatte nur eine mentale Leere beim Schreiben dieses up: P – complistic

+0

Fair genug: P! Aber es ist auch gut für andere Benutzer diese Frage zu lesen :) – jokklan

Antwort

52

Ein wenig mehr saubere Lösung:

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

Danke, das funktioniert super! Ich habe es vorher nicht gefunden, wie es unter Berechnungen in den Dokumenten ist. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html – complistic

7

wissen, auf den vorherigen Antworten erstellen, wenn Sie durch einen Verband arbeiten, können Sie nur _ids auf die Abfrage anhängen.

Also in Ihrem Beispiel, wenn ein Supplierhas_manyProducts, dann:

supplier.product_ids 

Ihr Array von Produkt-IDs zurückgeben würde, die an die Lieferanten gehören.

Verwandte Themen