7
votes

Rails + ActionCord: Comment créer un hachage de table avec la valeur de certains champs en tant que clé

Compte tenu d'une table ZipCodeInfos avec champs ZipCode, état, ville (toutes les chaînes), où ZipCode est unique: xxx pré>

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> xxx pré>

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 zipcode.first.attributes code> me donne p> xxx pré>

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?
p>

zip_info_hash = {}
ZipCodeInfo.all.map{|x| zip_info_hash[x.zip] = 
                       {'state' => x.state, 'city' => x.city }}


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser la méthode d'injection. Voici ce que j'utilise généralement. xxx


0 commentaires

0
votes

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]


0 commentaires

3
votes

Vous pouvez également essayer:

ZipCodeInfos.all.group_by &:zipcode 


0 commentaires