0

我正在做的事情的表面听起来微不足道。我想获取 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]

这更有意义吗?

4

1 回答 1

0
def hash_of_arrays(cats)   
  {}.tap do |hashie|   
    cats.each do |cat|  
      hashie[cat.id] = [cat.name, cat.age]  
    end  
  end   
end

puts hash_of_arrays(@cats).inspect
于 2013-04-26T21:33:54.680 回答