Rails - 意外 =>,期待 keyword_end - Savon

Rails - unexpected =>, expecting keyword_end - Savon

我正在尝试将以下数据传递到 Savon 以作为 XML 发送。

传入一项时工作正常。

当我为添加多个项目添加每个语句时,会产生以下错误:

syntax error, unexpected =>, expecting keyword_end
  'SalesOrder' => [

有效的代码:

new_or = {

"Order" => {
  "AccountCode" => '#{current_user.accode}',
  "Properties" => {
    "PropertyItem" => [
      {
        "Name" => "Foo",
        "Value" => "Bar",
      },
      {
        "Name" => "Colour",
        "Value" => "Green",
      }
    ]
  }
  "Items" => { 
    'SalesOrder' => {
       'sku' => "SKU-100",
        'Quantity' => 10,
        'Price' => 10.78,
     }
}

} #Close_Order

} #Close new_or

无效的代码:

new_or = {

"Order" => {
  "AccountCode" => '#{current_user.accode}',
  "Properties" => {
    "PropertyItem" => [
      {
        "Name" => "Foo",
        "Value" => "Bar",
      },
      {
        "Name" => "Colour",
        "Value" => "Green",
      }
    ]
  }
  "Items" => { 
    @order.items.each do |item|
       'SalesOrder' => [
        {
          'sku' => item.sku,
          'Quantity' => item.qtny,
          'Price' => item.price,
        },
      ],
  end
}

} #Close_Order

} #Close new_or

我要指出的第一件事是在这种情况下你应该使用 map 而不是 each 因为否则它不会 return 块的捕获结构,只有原始 Item 条记录。

其次,你的陈述中有很多语法问题,问题中的一些可能是拼写错误,因为你说第一部分是有效的,尽管那里也有一些问题。但是请研究以下我认为是您所追求的结果。

"Items" => @order.items.map { |item|
    {
        'SalesOrder' => {
            'sku' => item.sku,
            'Quantity' => item.qtny,
            'Price' => item.price
        }
    }
}

这将导致以下示例

"Items" => [
    {
        'SalesOrder' => {
            'sku' => 10,
            'Quantity' => 100,
            'Price' => 999
        }
    },
    {
        'SalesOrder' => {
            'sku' => 20,
            'Quantity' => 200,
            'Price' => 1299
        }
    }
]