2013-06-14 13 views
24

Sto cercando un modo facile/veloce per ottenere una matrice di ID da una relazione Active Record.Rails Active Record - Ottieni la matrice ids dalla relazione

Attualmente ho:

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

Ma questo è disordinato e richiede una mappa ..

Qualcosa di simile sarebbe più fresco:

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

Tutte le idee?

Grazie :)

+4

Pluck è la soluzione migliore qui, ma proprio come un bit: invece di 'map {| p | p.id} 'puoi scrivere' map (&: id) '. Questo è vero per tutti gli enumeratori ('each',' any? ',' Select', 'reject' ecc.), E chiamerà il simbolo su ogni oggetto attraversato. – jokklan

+0

oh sì, sapevo che 'map (&: id)' aveva solo un vuoto mentale durante la scrittura di questo: P – complistic

+0

Abbastanza corretto: P! Ma comunque è bello sapere per gli altri utenti che leggono questa domanda :) – jokklan

risposta

52

Un po 'più pulito soluzione:

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

Grazie, funziona benissimo! Non l'ho trovato prima in quanto è in Calcoli nei documenti .. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html – complistic

7

Per costruire sulle risposte precedenti, se si sta lavorando attraverso un'associazione, si può solo aggiungere _ids alla query.

Quindi nel tuo esempio, se un Supplierhas_manyProducts, quindi:

supplier.product_ids 

sarebbe restituire la matrice di ID di prodotto che appartiene al fornitore.

Problemi correlati