2011-10-03 2 views
6

je suis arrivé mes objets de collection comme ceci:Obtenez tous les IDs d'une collection

hotels = Hotel.where('selection = ?', 1).limit(4) 

Comment puis-je obtenir tous les ids de ce articles sans une boucle? Puis-je utiliser quelque chose comme:

hotels.ids ? 

Merci

Répondre

17

Qu'en est-il essayer hotels.map(&:id) ou hotels.map{|h| h.id }? Ils ont tous les deux la même signification pour Ruby, le premier est plus agréable pour les rubis habitués, tandis que le second est plus facile à comprendre pour les débutants.

+1

Il devrait être 'hotels.map (&: id)'. Sinon, je suis d'accord avec la réponse – DanneManne

+0

'hotels.map (&: id)' serait plus agréable. edit: outragé par @DanneManne :-) –

+0

@DanneManne Bonne prise pour la faute de frappe: me mord à chaque fois:/ – Romain

7

Vous pouvez également tirer uniquement les identifiants.

hotels.select(:id).where(selection: 1) 
+1

La solution la plus objective, facile et rapide. Cela semble si évident, mais les gens insistent pour utiliser des méthodes innombrables pour ** tout **. –

11

Si vous avez seulement besoin d'un tableau avec tous les ids, vous devez utiliser pluck comme il fait la requête à droite et vous ne devez pas utiliser un rubis. De plus, il n'aura pas à instancier un objet Hotel pour chaque enregistrement renvoyé par la base de données. (bien plus vite)

Hotel.where(selection: 1).pluck(:id) 
# SELECT hotels.id FROM hotels WHERE hotels.selection = 1 
# => [2, 3] 
Questions connexes