【问题标题】:Shopify API: Retrieve multiple records via id in a single callShopify API:在一次调用中通过 id 检索多条记录
【发布时间】:2015-09-14 07:34:21
【问题描述】:

我注意到在 Shopify API 文档中,他们提到了使用“以逗号分隔的订单 ID 列表” 作为名为“ids”的参数在一次调用中检索多个订单的可能性。

链接到我所指的文档部分:https://docs.shopify.com/api/order#index

多年来,我一直在使用基于 Rails ActiveResource 的 shopify_api gem。我目前在 Rails 3.2.13 中使用它,效果很好。

我知道如何检索单个记录:

# params[:id] = "123456789"
order = ShopifyAPI::Order.find(params[:id])

或一次多条记录:

orders = ShopifyAPI::Order.find(:all, :params => {:limit => 250, :page => 2})

但是,我似乎无法使用多个 ID 让它工作。有什么想法我在这里做错了吗?

# params[:ids] = "123456789,987654321,675849301"  
orders = ShopifyAPI::Order.find(:all, :params => {:ids => params[:ids]})

发出此 GET 请求:https://xxxxxx.myshopify.com:443/admin/orders.json?ids=123456789,987654321,675849301

但什么都不回,orders = []

更新:

我也尝试了以下建议:

# params[:ids] = "123456789,987654321,675849301"  
orders = ShopifyAPI::Order.find(params[:ids])

发出此 GET 请求:https://xxxxxx.myshopify.com:443/admin/orders/123456789,987654321,675849301.json

但是这只会返回第一个订单123456789

还有:

# params[:ids] = "123456789,987654321,675849301"
ids_as_array = params[:ordersSel].split(",")
orders = ShopifyAPI::Order.find(:all, :params => {ids: ids_as_array})

发出此 GET 请求: https://xxxxxx.myshopify.com:443/admin/orders.json?ids[]=123456789&ids[]=987654321&ids[]=675849301

结果是Bad Request

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.2 shopify activeresource


    【解决方案1】:

    这对我有用,刚刚在控制台中测试过

    myids = "2354899011,1234263747"
    ShopifyAPI::Order.where(ids: myids)
    

    这会导致以下请求

    https://myfancyshop.myshopify.com/admin/orders.json?ids=2354899011,1234263747
    

    这个ShopifyAPI::Order.find(:all, :params => { :ids => myids }) 也为我提供了相同的结果。

    【讨论】:

    • 此解决方案确实有效,但我看到您已经尝试过类似的事情或完全相同的事情。你确定所有的ID都在商店里吗?如果不是,结果将为零
    • 谢谢@voskart...那么至少我没疯 :) 请问您使用的是什么版本的 Rails + Shopify Api gem?早先尝试了这些确切的组合,但没有运气,所有的订单 id 都来自商店
    • @BjornForsberg 我使用的是 rails 4.2.0 和 shopify_app 6.2.0(shopify_api 是 4.0.6)
    • 感谢@voskart 花了一天的大部分时间从 Rails 3.2 升级到 4.2 才发现问题实际上是订单已存档,因此我需要为他们添加 :status => 'any' 选项出现。无论如何感谢您的帮助:/
    • 很高兴你修复了它@BjornForsberg
    【解决方案2】:

    好的,所以我一直在尝试的实际上是正确的。问题原来是我在测试商店中的订单已存档/关闭,因此请求需要是这样的:

    # params[:ids] = "123456789,987654321,675849301"  
    orders = ShopifyAPI::Order.find(:all, :params => {
        :ids => params[:ids],
        :status => 'any'
        })
    

    关键是在调用中包含:status => 'any',否则API 只返回状态为“打开”的订单。

    注意:以上内容适用于 Rails 3.2 和 Shopify API gem 3.2.6(因此无需使用最新版本)。

    感谢其他两个答案确认这是可能的。

    【讨论】:

      【解决方案3】:

      您可以将ids 作为find 的第一个参数传递:

      orders = ShopifyAPI::Order.find(params[:ids])
      

      或者如果您需要分页:

      orders = ShopifyAPI::Order.find(params[:ids], :params => {:limit => 250, :page => 1})
      

      【讨论】:

      • 谢谢,但不幸的是,这也不起作用@zwippie :( 它只返回列表中的第一条记录。我已经更新了我的问题以显示这个。
      • 嗯,orders = ShopifyAPI::Order.where(id: params[:ids]) 怎么样?
      • ActiveResource 没有“where”方法,所以这不起作用;) 无论如何谢谢@zwippie
      • 好吧,最后的猜测。拆分参数有帮助吗? params[:ids].split(',').
      • 感谢@zwippie 的帮助,但不幸的是,这会导致“错误请求”:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 2020-05-12
      • 2020-04-12
      相关资源
      最近更新 更多