将活动记录中的值插入哈希

时间:2013-06-28 15:24:05

标签: ruby-on-rails ruby

我有这个:

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

我需要插入此select(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 个答案:

答案 0 :(得分:2)

创建你的数组:

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

然后在哈希中插入数组。

答案 1 :(得分: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 })