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

如何在Rails中通过Shopify API更新商品位置?遇404错误

解决Rails中使用shopify_api添加Collect到自定义集合的问题

我来帮你搞定这个Shopify API的问题!你遇到的404错误,核心原因是不能直接通过更新CustomCollection对象的collects属性来添加或修改商品关联——Shopify的REST API里,Collect是独立的资源,需要单独创建/更新,而不是嵌套在CustomCollection里操作。

错误代码的问题分析

你之前的代码尝试直接给customCollection.collects赋值然后保存,这不符合Shopify REST API的设计:

customCollection = ShopifyAPI::CustomCollection.find("875454444547")
customCollection.collects = [ { "product_id": 21548151215, "position": 7 }, { "id": 875454444547, "position": 2 } ]
customCollection.save # 这里会触发错误,因为API不支持这种更新方式

Shopify不会识别这种嵌套更新collects的请求,所以返回404(请求的路由不存在)。

正确的实现方式

要添加商品到自定义集合,你需要直接使用ShopifyAPI::Collect的create方法;如果是修改已有Collect的位置,则用update方法:

1. 添加新的商品到自定义集合

# 先确认自定义集合存在(你的find操作没问题,但要确保ID是有效的)
custom_collection = ShopifyAPI::CustomCollection.find("875454444547")

# 创建第一个Collect关联(商品+位置)
ShopifyAPI::Collect.create(
  custom_collection_id: custom_collection.id,
  product_id: 21548151215,
  position: 7
)

# 如果要添加第二个新商品,同样调用create(注意不要传`id`,id是已有Collect的标识)
# ShopifyAPI::Collect.create(
#   custom_collection_id: custom_collection.id,
#   product_id: 你的第二个商品ID,
#   position: 2
# )

2. 修改已有Collect的位置

如果你代码里的{ "id": 875454444547, "position": 2 }是想修改某个已有Collect的位置,那么应该先找到这个Collect,再更新:

# 找到目标Collect
existing_collect = ShopifyAPI::Collect.find("875454444547")
# 更新位置
existing_collect.update(position: 2)

关于404错误的额外排查点

如果按上面的方法还是遇到404,你可以检查:

  • 自定义集合的ID是否正确,且你的API密钥有访问该集合的权限
  • 商品ID是否有效,且该商品属于当前店铺
  • 确保你的shopify_api版本和Shopify店铺的API版本兼容(版本不匹配也可能导致路由错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:22:59