You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rails中迭代JSON数组的方法及Shopify API订单遍历异常排查

解决Rails中Shopify订单JSON遍历的问题

看起来你离解决问题只差一步!我先帮你排查最可能的问题,再给你几个实用的优化建议:

1. 修复JSON解析的核心问题

你现在直接对RestClient.get返回的对象做JSON.parse,但其实RestClient返回的是RestClient::Response对象,不是纯JSON字符串。你需要先获取它的body属性再解析:

# 控制器里修正后的代码
@ordersfetch = RestClient.get("https://#{ENV['SHOPIFY_API_KEY']}:#{ENV['SHOPIFY_API_PASSWORD']}@website.myshopify.com/admin/api/2020-10/orders.json")
@orders = JSON.parse(@ordersfetch.body) # 关键:加上.body!

这应该是导致你视图遍历失败的主要原因——之前解析的是响应对象本身,而不是实际的JSON数据,所以@orders['orders']很可能是nil,自然无法执行遍历操作。

2. 验证数据结构是否符合预期

在视图里可以临时添加调试代码,确认数据结构是否正确:

<%= debug @orders %>

这会把@orders的完整结构以格式化的方式输出,你可以直观确认是否真的存在'orders'键,以及它的值是不是预期的数组格式。

3. 用更安全的方式避免遍历报错

即使数据结构正确,也建议用更健壮的写法,防止API返回异常时视图崩溃:

<% (@orders.dig('orders') || []).each do |order| %>
  <p>订单ID: <%= order['id'] %></p>
  <p>客户邮箱: <%= order['email'].presence || '未提供' %></p>
  <!-- 其他需要展示的订单字段 -->
<% end %>

dig('orders')会安全地获取嵌套键,如果键不存在就返回nil,搭配|| []可以确保即使没有订单数据,也不会抛出undefined method 'each' for nil:NilClass的错误。

4. 增加异常处理(可选但推荐)

Shopify API请求可能因为权限、网络波动等问题失败,建议在控制器里添加异常处理,避免整个页面崩溃:

begin
  @ordersfetch = RestClient.get("https://#{ENV['SHOPIFY_API_KEY']}:#{ENV['SHOPIFY_API_PASSWORD']}@website.myshopify.com/admin/api/2020-10/orders.json")
  @orders = JSON.parse(@ordersfetch.body)
rescue RestClient::ExceptionWithResponse => e
  Rails.logger.error "Shopify API 请求失败: #{e.response.body}"
  @orders = { 'orders' => [] } # 给默认空数组,保证视图正常渲染
rescue JSON::ParserError => e
  Rails.logger.error "JSON解析失败: #{e.message}"
  @orders = { 'orders' => [] }
end

按照上面的步骤调整后,应该就能正常遍历并显示每个订单了!

内容的提问来源于stack exchange,提问作者Gibson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:02:44