推送分离数组

时间:2014-02-23 22:01:22

标签: ruby-on-rails ruby arrays json

我有一个名为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中获得自己的数组。我怎么能得到这个?

感谢您的帮助!

1 个答案:

答案 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"]]