Compte tenu d'une table ZipCodeInfos avec champs ZipCode, état, ville (toutes les chaînes), où ZipCode est unique: Quel est le moyen le plus rapide de générer un objet hachage de la table entière où Le code-code postal est une clé comme ceci: p> Je sais pour un enregistrement donné, je peux utiliser. Attributes pour générer un hachage avec clé, valeur de valeur de noms de champs, champs valeurs, par exemple mais, à court de force brute itération sur chaque enregistrement (via .map), je ne peut pas comprendre comment créer le hachage souhaité avec le code-code postal comme clé de chaque noeud du hachage. P> C'est le meilleur que je pouvais trouver, et je soupçonne qu'il y a une certaine bonté de rubis tifty qui est plus rapide? zipcode.first.attributes code> me donne p>
p> zip_info_hash = {}
ZipCodeInfo.all.map{|x| zip_info_hash[x.zip] =
{'state' => x.state, 'city' => x.city }}
3 Réponses :
Vous pouvez utiliser la méthode d'injection.
Voici ce que j'utilise généralement.
Je ne peux pas penser à un moyen d'éviter carte code> ici. Je ne ferais que quelques modifications mineures à votre code:
zip_info=Hash[*ZipCodeInfo.all
.map{|x| [x.zip, {:city => x.city, :state => x.state}]}
.flatten]
Vous pouvez également essayer:
ZipCodeInfos.all.group_by &:zipcode