我按照属性对模型实例进行分组,然后操纵哈希值。
Product.create(id: 1, name: "alpha", value: "apple")
Product.create(id: 2, name: "beta", value: "bongo")
...
我们想要表单:[["alpha"],[["apple"],[1]]],[[beta],[["bongo"],[2]]]...]
array = []
array1 = []
Product.all.group_by(&:name).each do |a|
a[1].each do |b|
array1 << [b.value,b.id]
end
array << [a[0],array1]
array1 = []
end
a
和b
是迭代器变量,array1
包含第i个[1]值,array
包含所需的输出结构。
这很有效,但很难看。你能干得更清楚吗?
答案 0 :(得分:1)
array = Product.all.group_by(&:name).map { |name, products|
[name, products.map { |product| [product.value, product.id] }]
}
我相信这是你想要的,但不是100%肯定。请尝试使用描述性名称,需要花费大量精力来确定array1
,b
和类似的非标识标识符。如果你发布一个输出结构的例子也很好。