[英]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.