2014-02-23 119 views
0

我有一個名爲產品的表,它有一個名爲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

會根據您:

@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"]]