如何使用ShopifyAPI(Ruby On Rails)高效地更新许多ShopifyAPI::Product实例? [英] How to efficiently update many ShopifyAPI::Product instances using ShopifyAPI (Ruby on Rails)?

查看:32
本文介绍了如何使用ShopifyAPI(Ruby On Rails)高效地更新许多ShopifyAPI::Product实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个应用程序,它将位于供应商专有的库存管理系统和他们的Shopify商店之间。该应用程序将根据库存管理系统生成的新数据定期更新Shopify。它还将为Shopify WebHook提供端点。

我目前正在做这样的事情(省略了很多东西的伪Ruby):

  def update_product_with_proxy(product_proxy)
    product_proxy.variant_proxies.dirty.each do |variant_proxy|
      update_variant_with_proxy(variant_proxy)
    end

    if product_proxy.dirty_proxy
      shopify_product = ShopifyAPI::Product.find(product_proxy.shopify_id)
      shopify_product.update_attributes({some attributes here})
    end
  end

其他地方:

  def update_variant_with_proxy(variant_proxy)
    shopify_variant = ShopifyAPI::Variant.find(variant_proxy.shopify_id)
    shopify_variant.update_attributes({some attributes here})
  end
这似乎非常低效,因为我必须获取每个更新的ShopifyAPI::Product和ShopifyAPI::Variant,然后才能更新它们(我在本地缓存了它们的ID)。更新周期大约需要25分钟,更新24个产品,每个产品有16个变种。Rails更新我的产品/变体代理的时间不到2秒。另外99%的时间是用来和Shopify聊天的。我一定是做错了什么。

鉴于我知道远程对象的ID,是否有方法可以直接更新它,而不必先获取它?

干杯, -Tomek

推荐答案

首先要做的是:您可以通过其父产品更新变体。一旦您获取了产品,它将包含变体信息,因此您可以对其进行编辑、保存,并且更改将在单个API调用中持久化。那将为您节省一些时间。

第二:您可以使用gem在本地创建一个对象,给它一个id,然后调用save发起PUT请求,而无需首先从Shopify获取该对象。下面这样的代码应该会起作用:

product = ShopifyAPI::Product.new(:id => 1, :title => "My new title")
product.save

将这两件事放在一起应该会给您带来您想要的:能够在单个API调用中更新产品的变体。

注意:为便于将来参考,shopify_apigem构建于Active Resource之上,因此您可以使用该库执行的任何操作都可以使用gem执行。

这篇关于如何使用ShopifyAPI(Ruby On Rails)高效地更新许多ShopifyAPI::Product实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆