我有一个名为products的表,它有一个名为data的hstore字段。
所以我的索引看起来像这样:
def index
@products = Product.all
@headers = @products.map(&:data).flat_map(&:keys).uniq
@product_data = []
@products.each do |product|
@headers.each do |key|
@product_data.push(product.data[key])
end
end
respond_to do |format|
format.html
format.json do
render :json => {
"myDataAfter" => @product_data.as_json,
"myDataBefore" => @products
}
end
end
end
myDataBefore基本上是我在调用整个产品模型的json represontation时获得的。它看起来像:
"myDataBefore":
[
{
"id": 76,
"store_id": 128,
"created_at": "2014-02-19T04:30:43.455Z",
"updated_at": "2014-02-19T04:30:43.455Z",
"data": {
"81506": "Same",
"Hello world": "Yes"
}
},
{
"id": 77,
"store_id": 128,
"created_at": "2014-02-22T04:39:08.708Z",
"updated_at": "2014-02-22T04:39:08.708Z",
"data": {
"81506": "dasfsdaf",
"Hello world": "dafs"
}
}
]
myDataAfter是我的json现在的样子,试图得到我想要的东西:
"aaData":["Same","Yes","dasfsdaf","dafs"]
因此它将两行数据属性合并为一个单独的数组。但我真的希望“相同”和“是”在一个数组中,而“dasfsdaf”和“dafs”在另一个数组中。所以基本上表中的每一行都在JSON中获得自己的数组。我怎么能得到这个?
感谢您的帮助!
答案 0 :(得分:1)
鉴于你有:
@products = [{id:76,store_id:128,created_at:"2014-02-19T04:30:43.455Z",updated_at:"2014-02-19T04:30:43.455Z",data:{"81506" => "Same","Hello world" => "Yes"}},{id:77,store_id:128,created_at:"2014-02-22T04:39:08.708Z",updated_at:"2014-02-22T04:39:08.708Z",data:{ "81506" => "dasfsdaf", 'Hello world' => "dafs"}}]
你可以简单地做
@products.map{ |product| product[ :data ].values }
# => [["Same", "Yes"], ["dasfsdaf", "dafs"]]