activerecord - 导轨 + 事件记录 : how create a hash from table with particular field's value as key

标签 activerecord hash

给定一个包含邮政编码、州、城市(所有字符串)字段的 ZipCodeInfos 表,其中邮政编码是唯一的:

zipcode,city,state
"10000", "Fooville", "AA"
"10001", "Smallville", "AA"
"10002", "Whoville", "BB"

生成整个表的哈希对象的最快方法是什么,其中邮政编码是这样的键:
{ "10000" => {:city => "Fooville", :state => "AA" },
"10001" => {:city => "Smallville", :state => "AA" },
"10002" => {:city => "Whoville", :state => "BB" } }

我知道对于给定的记录,我可以使用 .attributes 生成带有键、字段名称、字段值的值对的哈希,例如 Zipcode.first.attributes给我
{"id" => 1, "zipcode" => "10000", "city" => "Fooville", "state => "AA" }

但是,由于没有对每条记录进行强力迭代(通过 .map),我无法弄清楚如何使用邮政编码作为散列的每个节点的键来创建所需的散列。

这是我能想到的最好的方法,我怀疑有一些漂亮的 Ruby 优点可以更快?
zip_info_hash = {}
ZipCodeInfo.all.map{|x| zip_info_hash[x.zip] = 
                       {'state' => x.state, 'city' => x.city }}

最佳答案

你也可以试试:

ZipCodeInfos.all.group_by &:zipcode 

会给你一个邮政编码的散列到 ZipCodeInfos activerecords 数组。

关于activerecord - 导轨 + 事件记录 : how create a hash from table with particular field's value as key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599010/

相关文章:

arrays - Perl 中的 {} 和 ->{} 有什么区别?

php - Codeigniter,事件记录,将第二个表值连接为数组

mysql - 防止 Rails 4 迁移将时间戳更改为日期时间?

scala - 从 MurmurHash 迁移到 MurmurHash3

passwords - 如何将密码哈希从 MD5 转换为 SHA?

c# - 我有错误的哈希值? C#密码学

ruby-on-rails - 错误率: FasterCSV to hash

ruby-on-rails - ruby on rails 我应该从 Controller 查询数据库吗

ruby-on-rails - Rails 按关联计数和同一模型上的关联字段进行排序

mysql - 在 Rails 中使用带有西类牙语数据库的英语模型