使用ShopifyAPI Ruby gem删除InventoryLevel后触发NoMethodError求助
ShopifyAPI删除InventoryLevel成功后抛出NoMethodError的解决思路
我使用ShopifyAPI Ruby gem删除指定位置商品的InventoryLevel,执行以下代码时操作实际成功完成:
ShopifyAPI::InventoryLevel.delete( inventory_item_id: "correct_id", location_id: "and_another_correct_id" )
但每次都会抛出错误:
NoMethodError (undefined method `empty?' for nil:NilClass)
以下是可行的解决思路:
- 升级ShopifyAPI gem版本:旧版本的gem可能存在响应处理bug。删除InventoryLevel的API成功后通常返回空响应,旧版gem可能错误地对nil响应调用
empty?方法。执行bundle update shopify_api升级到最新稳定版,多数情况下能解决问题。 - 捕获特定错误忽略:如果暂时无法升级gem,可以用异常捕获忽略这个不影响结果的错误。因为删除操作已经成功,只需过滤掉该特定的NoMethodError即可:
begin ShopifyAPI::InventoryLevel.delete( inventory_item_id: "correct_id", location_id: "and_another_correct_id" ) rescue NoMethodError => e # 仅忽略这个特定的错误,其他错误正常抛出 raise e unless e.message.include?("undefined method `empty?' for nil:NilClass") end - 修复gem源码问题:查看ShopifyAPI gem中处理删除响应的逻辑,大概率是在解析响应时未判断响应体是否为nil就调用了
empty?。可以临时fork gem修改相关代码,或者向官方提交PR修复该bug。
内容的提问来源于stack exchange,提问作者ToddT
相关产品推荐
相关产品推荐

