0

我有这个:

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

我需要在此处插入此选择的结果(产品变量):

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"


                          }
                        }
                      }
                }

我怎样才能做到这一点?

提前致谢!

4

2 回答 2

2

创建你的数组:

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

然后在您的哈希中插入数组。

于 2013-06-28T15:31:01.483 回答
1

就像在 apneadiving 示例中一样,使用 map 从 produtos 数据创建一个数组;用于attributes从您选择的数据中返回所有数据(它是一个哈希)

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

或者如果您需要更具体地了解产品中的键并在初始化后附加它

# 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 })
于 2013-06-28T16:28:16.957 回答