【发布时间】:2013-04-27 05:33:54
【问题描述】:
我所做的事情的表面看起来微不足道。我想获取 ActiveRecord 对象并从中构建一个包含以下格式的哈希:
把@records 变成:
{ record.id => [record.attr1, record.attr2], record.id => [...] }
我正在尝试使用类似于以下内容的方法来做到这一点:
Hash[*@records.map{|r| [r.attr1, r.attr2 ]}.flatten]
但似乎无法获得正确的语法以使其看起来像上面的示例。
** 更新以更清楚地了解所询问的内容**
让我举一个具体的例子。我有一系列猫。这是从具有两个属性的 Cat 模型派生的:name(string) 和 age(int)。我想通过执行以下操作来检索一组猫:
# I realize this isn't optimal but that's not the point of this question
@cats = Cat.all.entries
然后我尝试将 JSON 散列传递给客户端,其中散列将每个猫实例 ID 作为键和一个值,该值是一个包含猫名和年龄的数组。
在 @cats 数组上运行适当的 Hash/zip 组合后,生成的哈希看起来像。
{ "15" : ["charles", 3], "18" ["winnie", 5], ... }
我正在尝试做类似的事情:
Hash[*@cats.map{|c| [c.name, c.age ]}.flatten]
这样更有意义吗?
【问题讨论】:
-
你想要什么输出?
-
什么是
@records?你有inspect的结果吗? -
我更新了问题以包含更多细节并进一步阐明我要问的是什么。我希望这更有意义?让我知道是否需要添加更多详细信息。
-
你为什么用这个
Hash[*@cats.map{|c| [c.name, c.age ]}.flatten],用这个你遇到了什么问题? -
如果我明白你想要什么,这可能会有所帮助:
@cats.each_with_object({}){|el,h| h[el.id] = [el.name, el.age]}