rails + activerecord:如何使用特定字段的值作为键从表创建哈希

jpw*_*ynn 6 hash activerecord

给定一个ZipCodeInfos表,包含字段zipcode,state,city(所有字符串),其中zipcode是唯一的:

zipcode,city,state
"10000", "Fooville", "AA"
"10001", "Smallville", "AA"
"10002", "Whoville", "BB"
Run Code Online (Sandbox Code Playgroud)

生成整个表的哈希对象的最快方法是什么,其中zipcode是这样的键:

{ "10000" => {:city => "Fooville", :state => "AA" },
"10001" => {:city => "Smallville", :state => "AA" },
"10002" => {:city => "Whoville", :state => "BB" } }
Run Code Online (Sandbox Code Playgroud)

我知道对于给定的记录,我可以使用.attributes生成一个带有键,值对的字段名,字段值的哈希,例如Zipcode.first.attributes给我

{"id" => 1, "zipcode" => "10000", "city" => "Fooville", "state => "AA" }
Run Code Online (Sandbox Code Playgroud)

但是,如果没有蛮力迭代每条记录(通过.map),我就无法弄清楚如何使用zipcode创建所需的哈希值作为哈希每个节点的关键.

这是我能想到的最好的,我怀疑有一些漂亮的Ruby优点更快?

zip_info_hash = {}
ZipCodeInfo.all.map{|x| zip_info_hash[x.zip] = 
                       {'state' => x.state, 'city' => x.city }}
Run Code Online (Sandbox Code Playgroud)

小智 3

您还可以尝试:

ZipCodeInfos.all.group_by &:zipcode 
Run Code Online (Sandbox Code Playgroud)

将为您提供 ZipCodeInfos 活动记录数组的邮政编码哈希值。