如何在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
相关产品推荐
相关产品推荐

