2013-06-28 28 views
0

我有這樣的:插入值從活動記錄到一個哈希

produtos = LineItem.select('codigosku, quantity').where("cart_id = #{session[:cart_id] } ") 

我需要插入這個選擇(produto變量)的結果,在這裏:

message = Hash.new 
     message = { 
     "tem:carrinho" => {"gpa:CEP" => params[:cep], 
         "gpa:CNPJ" => 'doc', 
         "gpa:IdCampanha" => 1111, 
         "gpa:Produtos" => {"gpa:DadosListaProdutoCarrinhoDTO" => 
          { 

           HERE! VALUES OF "PRODUTOS VARIABLE" 


          } 
         } 
         } 
       } 

我該怎麼做?

在此先感謝!

回答

2

創建數組:

line_items_array = line_items.map{|li| li.attributes } 

然後插入你的哈希中的數組。

+0

如何將這個數組插入散列?對不起,這個愚蠢的問題... :-( – OtavioLipari

1

喜歡在apneadiving示例中,使用map從產品數據創建數組;使用attributes從您選擇的數據

message = { 
    "tem:carrinho" => { 
    "gpa:CEP" => params[:cep], 
    "gpa:CNPJ" => 'doc', 
    "gpa:IdCampanha" => 1111, 
    "gpa:Produtos" => { 
     "gpa:DadosListaProdutoCarrinhoDTO" => produtos.map { |item| item.attributes } 
    } 
    } 
} 

或返回的所有數據(它是一個哈希),如果您需要更具體的關於在produtos密鑰和初始化後其追加

# initialize the Produtos to nil 
message = { 
    "tem:carrinho" => { 
    "gpa:CEP" => params[:cep], 
    "gpa:CNPJ" => 'doc', 
    "gpa:IdCampanha" => 1111, 
    "gpa:Produtos" => nil 
    } 
}   

# build an array of DadosListaProdutoCarrinhoDTO 
list = produtos.map do |item| 
    { 
    "gpa:DadosListaProdutoCarrinhoDTO" => { 
     "codigosku" => item.codigosku, 
     "quantity" => item.quantity 
    } 
    } 
end 

# set the Produtos key to an array of DadosListaProdutoCarrinhoDTO 
message["tem:carrinho"].merge!({ "gpa:Produtos" => list }) 
+0

謝謝你很多!完美的作品!!! – OtavioLipari

+0

請多一個信息!我只想要「codigosku」=> item.codigosku,「quantity」=> item.quantity被重複,在「gpa:DadosListaProdutoCarrinhoDTO」標籤裏面!!!這是可能的嗎?最好! – OtavioLipari

+1

你正在使用2個數據結構散列和數組,沒有魔法發生,你應該能夠構建所需的輸出上面的例子 – house9