繁体   English   中英

Ruby on Rails 循环阵列来自 Postman 请求

[英]Ruby on Rails loop array from Postman request

我花了一些时间寻找一个解决方案,如何将来自 HTTP 请求的数组转换为可以读取的东西。

请求示例:

 "line_item":[{
     "item_id": 1,
     "item_name": "Burger",
     "item_price": 15.00,
     "item_quantity": 2
 },
 {
     "item_id": 2,
     "item_name": "Soda",
     "item_price": 3.00,
     "item_quantity": 1
 }]

然后我像这样循环数组:

    @not_available_items = []
    @line_item = @order.line_item
    
    @line_item.each do |i| 
      @item = Item.find(i.item_id)
      if @item.is_active == false
        @not_available_items.push(
          {
            item_id: i.item_id,
            item_name: i.item_name
          }
        )
      end
    end

错误信息:

"exception": "#<NoMethodError: undefined method `item_id' for {\"item_id\"=> 1, \"item_name\"=>\"Burger\", \"item_price\"=> 15.0, \"item_quantity\"=> 2}:Hash>"

希望我清楚地解释了这个问题。

谢谢

变量i是 Hash 类型的Hash (而不是Item类型)。 在 Ruby 中,与 Javascript 不同,您无法使用 66 访问Hash ZA8CFDE6331BD59EB2AC96F8911C4B6 的密钥. 操作员。

您可以使用[]运算符获取 Hash 中键的值。

在您的代码中,您使用的是i.item_id ,但i没有名为item_id的属性或方法; 它有一个关键item_id 由于i是 Hash,因此您可以通过调用和i["item_id"]访问这些字段

    @not_available_items = []
    @line_item = @order.line_item
    
    @line_item.each do |i| 
      @item = Item.find(i["item_id"])
      if @item.is_active == false
        @not_available_items.push(
          {
            item_id: i.item_id,
            item_name: i.item_name
          }
        )
      end
    end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM